Sensei:分布式, 实时, 半结构化数据库
在未出现开源搜索引擎以前, 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>
本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!