关于大数据量索引同步 解决方案
关于大数据量索引同步 解决方案
索引的作用是加快数据的检索速度,当然加了索引并不是 只有好处没有坏处, 没有索引的情况下 原数据的更改 update 操作只需要更新原数据就可以 但是 有索引的情况下就需要同步更新索引,还有就是索引数据冗余的问题,所以在索引数据的时候需要分开好哪些需要索引 哪些不需要 这样可以减少数据 冗余, 在大数据中比较容易体现的就是hbase的索引问题 ,habse 是列式存储数据库 最大的优点就是根据rowkey 查询速度非常快,但是如果 在复杂查询的条件下 比如 拿到某天 的数据 哪些区间 的数据 ,虽然hbase 内部实现了filter的功能 但是根本还是全表扫描的操作 这样数据 查询的速度就会很慢, 现在有很多的解决方案 phoenix 一个habse的开源索引插件 利用habse rowkey查询的优势 对各个列簇下的数据进行rowkey 合并, 但是也有很多的确定 数据冗余 时间 timestamp 特性的丢失。 还有就是 habse+solr 还有habse+ es 大体的解决方法就是 在数据进行 复杂查询的时候 使用es查询 然后拿到数据的原始rowkey 然后从habse中讲数据检索出来。
现在,我是用的是accumulo(与habse 相同特性 有一些优化 还外加了权限认证的机制) 作为原数据存储, 然后 索引使用es5 , 在单条数据操作的情况下 是先更新accumulo 在更新 es,batch 批次处理的时候 同理 先批次更新accumulo 在更新es , 但是在刚开始大数据量导入的时候这样单机的操作 速度满足不了。所以决定效仿phoenix 搞一个异步更新索引,首先使用spark 数据并行灌入accumulo 不索引 ,然后 在并行的同步索引数据到es 考虑到在这期间对数据库操作的问题 想搞一个锁表的操作,但是在accumulo 官方文档并没有找到相关操作 所以还没实现。