V1.1.9.7版本发布

ydb.1.1.9.7版本发布

本次版本需要同时更新YDBYDB提供的spark

ydb下载地址

http://blog.ycloud.net.cn/software/ydb/ 选择其中的(ya100-1.1.9.7.xxx.xxx.xxx.stable.zip 来下载)

ydb提供的spark下载地址

http://blog.ycloud.net.cn/software/ydb/spark/ 请选择跟hadoop对应的spark版本

,添加简单查询的分页功能

目前该功能只支持 简单明细查询SQL的分页功能,复杂的SQL,统计SQL,嵌套SQL等目前还不支持该功能

select * from ydb_example_shu where dbpartition='3000w' limit 3,20

,YDBJDBC异步返回接口开发

目前该功能只支持 简单明细查询SQL的异步返回功能,复杂的SQL,统计SQL,嵌套SQL等目前还不支持该功能

如果YDBSQL一下返回9999条数据,目前YDB的业务逻辑是等待9999条数据全部处理完毕后在返回,但是业务页面想更快的展示出来,这个是有YDB可以不在等待9999条数据都查询完毕后一起返回,而是每条数据检索后立即返回,让客户端尽快的得到数据,尽快展示,后续的数据在以后台的方式慢慢返回.

目前异步的实现考虑到效率问题,采用异步的批量返回,每批量默认为1024,可以通过ydb.sql.request.async.batch.size参数进行调节

,默认将YDB快速模式的10000条修改为30000,并可以配置

通过在ydb_site.yaml文件中修改ydb.max.limit.rows参数的值就可以调节

,YDB可以通过add ydbinex方法将HDFS中的lucene索引添加到YDB中去

1:该功能可以用于调整分区粒度,如按照天的粒度经过7天以后可以调整为月的粒度

2:可以用于与客户对接索引

--将指定目录的索引移动到特定的分区里
add ydbindex ["-tablename" ,"ydb_example_shu" ,"-partion" ,"i10" ,"-copy" ,"false" ,"-sata" ,"/data/ycloud/ydb/ydbpath/index/ydb_example_shu/index_3000w2"]

--将指定目录的索引复制到特定的分区里
add ydbindex ["-tablename" ,"ydb_example_shu" ,"-partion" ,"i10" ,"-copy" ,"true" ,"-sata" ,"/data/ycloud/ydb/ydbpath/index/ydb_example_shu/index_3000w2"]

,针对行存储可以按块进行压缩

对于存储要求异常苛刻的项目,可以对数据进行按快压缩,比如说以16k为一块,将5~100条消息打包在一起以lz4格式压缩。
往往可以节省几倍的存储空间。代价是查询的时候需要解压,返回记录越多,解压代价越高。可以考虑针对原始数据的存储采用这种数据类型。

压缩效果测试如下:

采用LZ4压缩算法
每块4k行存---占用937.00 MB
每块16k行存--占用580.03 MB
每块32k行存--占用496.00 MB (YDB新版缺省配置)
每块64k行存--占用407.51 MB
每块128k行存-占用380.35 MB
采用Deflate压缩算法
每块128k行存-占用327.43 MB

可以通过在ydb_site.yaml中调整ydb.rows.block.compress参数来调整压缩算法,可选的值如下

lz4:采用lz4压缩每块32k行存 (默认)

deflate: 采用Deflate压缩算法每块128k行存

none:采用LZ4压缩算法,每块16k行存

,去掉SQL中含有YDB的字样

应多个集成商要求,凡是SQL中含有YDB和延云字样的SQL,均支持一种非YDB字样的表达

针对此需求,存在不完全向下兼容的问题,故需要在ydb_site.yaml里额外配置

db.partition.default: "db_default_partion"
db.dbview.viewname: "dbview_name"
db.dbview.viewlike: "dbview_like"
db.dbview.physicaltable: "db_physical_table"
db.dbview.viewstoreconf: "db_viewstore_config"
db.web.info.header: "

hello head

"
db.web.info.fooder: "

hello bottom

"


本地改动点
(
),(完全向下兼容)SQL语句中涉及YDB字样的去掉 =>对之前SQL最简单的兼容方式即将ydb更改为db

ydbpartion,ydbpartion=>dbpartion,dbpartition
ydbkv=>dbkv
ydbparams=>dbparams
create ydbtable  =>create dbtable
create ydbview =>create dbview
drop ydbtable =>drop dbtable
@ydbonly  =>@dbonly
ydbimport =>dbimport
add ydbindex => add dbindex
show ydbstatus =>show dbstatus;

/*ydb.pushdown('->')*//*('<-')pushdown.ydb*/ => /*db.pushdown('->')*//*('<-')pushdown.db*/
(
),(无法向下兼容)默认分区ydb_default_partion
需要在ydb_site.yaml中设置
ydb.partition.default: "db_default_partion"

(),(完全向下兼容)数据类型的修改
ydblike =>dblike
ydblikebig=>dblikebig
ydbtext =>dbtext
ydbtextbig   =>dbtextbig
(
),(完全向下兼容)ydb_site.yaml
1:ydb_site.yaml
可从重命名为db_site.yaml
2:ydb_site.yaml
中所有以ydb.开头的配置项均可以采用db.xx替换,如果配置项有冲突则db.xx的优先

db.hdfs.path: "{{c2_ydb_path}}/ydbpath"
db.reader.rawdata.hdfs.path: "{{c2_ydb_path}}/rawdata"
db.httpserver.port: {{a8_ydbui_port}}

(),(无法向下兼容)视图表
需要在ydb_site.yaml中设置
ydb.ydbview.viewname: "dbview_name"
ydb.ydbview.viewlike: "dbview_like"
ydb.ydbview.physicaltable: "db_physical_table"
ydb.ydbview.viewstoreconf: "db_viewstore_config"

(),(完全向下兼容)webui中涉及延云与YDB字样的进行了移除
(
),(完全向下兼容)系统表中的如下表明在show tables中进行了屏蔽
HiveMapSkip.put("ydb", "");
for(int i=0;i<100;i++)
{
HiveMapSkip.put("ydb"+i, "");
}
HiveMapSkip.put("ydb_ya100_heartbeat", "");
HiveMapSkip.put("ydbpartion", "");
HiveMapSkip.put("ydb_loadtxt_withinfo", "");

:YDB提供了MAPREDUCEMR接口

基本用法为,更多的请参考YdbHadoopInputFormatExample的示例

job.set("ydb.driver.hostport", otherArgs[0]);
job.set("ydb.core.sql", otherArgs[1]);
job.setInputFormat(YdbHadoopInputFormat.class);

:索引对接示例

假设索引目录结构如下


可以通过 如下定时任务 接入索引

*/5 * * * * sh /opt/ydbsoftware/ya100/bin/IndexMonitor.sh  /ydbindex/index "_-_" >> /opt/ydbsoftware/ya100/logs/monitor.log

:自定义分词的对接

:其他优化

1:索引合并上的优化调整,避免超大与超小的索引在一起合并

2:分片数量修正,不在受sparkcores所影响,完全遵循配置文件

3:每次spark查询ydb在每个进程上使用的cores由原先的2个调整为1,以提升并发性

4:去掉一些容易因歧义或写错导致数据误删的接口

十一:BUG修正

当一个表删除后,该表并不存在,如果客户依然还在通过kafka向其中导数据, YDB会不断的检查 该表是否被创建 因建表线程资源有限,会导致其他查询阻塞住,以前没有遇到删表后客户依然向其到数据的问题, 所以没有发现,我已经修改代码,删表后即使客户依然向其导入数据,依然可以避免此问题

十二:客户测试反馈的二次问题修正

1),1210UI页面中含有“ydb端口
2),ydb_site.yaml
改名失败,服务读取不到db_site.yaml此文件。
3),truncate table
更名为truncate dbtable 基于风险原因考虑 truncate table写法不在支持
4),kafka
消费兼容 dbpartition, dbpartion,也向下兼容
5),
测试报告中关于,SQL语句不规范的问题 统一支持 dbpartition,也向下兼容
6),drop view
truncate view 适配 drop dbviewtruncate dbview的写法
7),show partitions xx
也适配  show ydbpartition|dbpartition|dbpartitions|ydbpartitions
8),
修正数据类型bigint类型没有兼容y_long_id类型的BUG