Sensei:分布式, 实时, 半结构化数据库

jopen 13年前
     在未出现开源搜索引擎以前, Doug Cutting整了个Lucene, 随后Yonik Seeley写了一个Solr, 在2010年 Shay Banon发布了ElasticSearch, 大概在两年前, 我们迎来了Sensei, 最近他们发布了1.0版本, 下面通过    <a href="/misc/goto?guid=4959517981966401904" target="_blank">@sematext</a>对LinkedIn的搜索架构师John Wang的一个采访. 来大致了解一下Sensei.    <br />    <div style="text-align:center;">     <img alt="Sensei:分布式, 实时, 半结构化数据库" src="https://simg.open-open.com/show/1803a640ff5bdea34aac5432c4ce8bd0.png" width="554" height="593" />    </div>    <br />    <br />    <span style="color:red;">Sensei是什么?</span>    <br /> 开源, 灵活, 实时, 分布式数据库, 原生支持搜索, 能操作非结构化文本和结构化数据. 它主要用户处理海量复杂半结构化查询和经常变化的数据结构. 它广泛用于支持LinkedIn.com的搜索功能.    <br />    <br />    <span style="color:red;">为什么没有用solr?</span>    <br /> 1.更新量大    <br /> 2.分布式. 目前solr的分布式在master上还存在单点问题(SPOF), 让Solr Cloud还没出来    <br /> 3.复杂的facet支持.    <br />    <br />    <span style="color:red;">Sensei的独到之处有哪些?</span>    <br /> 支持海量更新    <br /> 支持半结构化查询    <br />    <br />    <span style="color:red;">Sensei最大的缺点以及计划何时解决?</span>    <br /> 1. Sensei的文档必须有一个long类型的唯一标示符. 这个主要是处于性能的考虑. 目前没考虑解决.    <br /> 2. 数字类型不支持负数, 该功能即将实现.    <br /> 3. 静态schema. 稍后支持.    <br />    <br />    <span style="color:red;">接下来即将实现的关键功能有哪些?</span>    <br /> 1.相关的工具    <br /> 2.内建对时间和地理信息类型字段支持    <br /> 3.parent node类型文档支持    <br /> 4.支持属性类型facet(名字对)    <br /> 5.在线均衡重置    <br /> 6.在线索引重建    <br /> 7.参数化二级存储    <br /> 8.动态schema    <br /> 9.支持聚合函数, 比如AVG, MIN, MAX    <br />    <br />    <span style="color:red;">Norbert在Sensei中的作用?</span>    <br /> 一个集群管理器, 负责Broker和Sensei node之间的RPC调用. Broker是内置在Sensei节点的Servlet. Norbert用于Sensei Node之间的消息传输. 同时它内置了Zookeeper来进行集群管理. 下一步将对其进行抽象, 允许以plugin的方式集成其他集群功能.    <br />    <br />    <span style="color:red;">对BQL介绍一下?</span>    <br /> BQL – Browse Query Language. 作为SQL变种支持Sensei查询. 它将成为Sensei的标准查询.    <br />    <br />    <span style="color:red;">Sensei相关的性能测试数据?</span>    <br /> 测试数据参见:http://senseidb.com/performance.html    <br /> 相关测试代码参见:https://github.com/kwei/search-perf    <br />    <br />    <span style="color:red;">Sensei是否有单点问题(SPOF)?</span>    <br /> 没有.    <br />    <br />    <span style="color:red;">什么情况下会导致数据丢失?</span>    <br /> 除非所有副本节点都丢失了数据    <br /> Sensei要求添加的所有数据都是有序而且带版本的, 从而实现数据回放恢复.    <br />    <br />    <span style="color:red;">如果集群中的一个节点挂了会怎样?</span>    <br /> 有ZooKeeper呢.    <br />    <br />    <span style="color:red;">如果达到集群容量上限会如何处理? 自动扩展还是手工重置负载均衡?</span>    <br /> 取决于数据的Sharding方式.    <br /> 新加入的节点需要在sensei.properties配置文件中指定处理那些分片的数据, 比如:    <br /> sensei.node.partitions=1,3,8    <br />    <br /> 如果sharding策略不需要迁移数据, 比如根据时间和连续UID sharding, 那么扩展集群将非常方便    <br /> 如果sharding策略需要迁移数据. 比如采用取模的方式sharding, 这时集群就需要重置负载均衡. 下一步将实现在线重置负载均衡. 而现在需要对所有数据重建索引.    <br />    <br />    <span style="color:red;">作为最终一致性的Sensei, 如何保证多次查询结果一致?</span>    <br /> 通过一个路由参数, Sensei采用一致性hash路由参数, 保证每次查询都定位到同一个节点.    <br />    <br />    <span style="color:red;">如何升级? 是否需要停机整个集群? 是否向后兼容?</span>    <br /> 部分升级. 不需要停机整个集群. 向后兼容.    <br />    <br />    <span style="color:red;">sensei是否需要shema?</span>    <br /> 需要, 下一步支持动态shema.    <br />    <br />    <span style="color:red;">其他搜索功能的支持情况?</span>    <br /> 通过相关工具支持Function query    <br /> 计划支持SpatialSearch和Parent-Child数据    <br /> 不计划支持Join.    <br />    <br />    <span style="color:red;">如何访问Sensei?</span>    <br /> 提供两个接口: REST/JSON和BQL    <br /> 提供Java和Python客户端.    <br />    <br />    <span style="color:red;">Sensei的运维工具做的怎样?</span>    <br /> 自带有一个web应用来管理集群.    <br /> 提供了JMX支持,    <br /> 还支持修改配置来调整输出, 比如日志输出.    <br />    <br /> 原文地址:    <a href="/misc/goto?guid=4959517982060844609" target="_blank">http://blog.sematext.com/2012/01/26/sensei-distributed-realtime-semi-structured-database/</a>