使用ElasticSearch作为真相来源

时间:2016-12-22 07:51:48

标签: database elasticsearch architecture

我正在与一个使用两个数据源的团队合作。

  1. MSSQL作为进行交易调用的主要数据源。
  2. ES作为查看数据的备用/只读事实来源。
  3. e.g。如果我下了订单,订单会插入到DB中,然后有一个RabbitMQ监听器/ Batch,然后将数据从DB同步到ES。

    不知何故,这个系统甚至只有一百万条记录就失败了。当我说失败时,这意味着记录不会及时在ES中更新,例如假设我创建优惠券,然后优惠券在DB中生成,当优惠券生成时,客户会尝试立即兑换优惠券,尽管ES还没有关于优惠券的信息,所以它失败了。当然有选择使用RabbitMQ的优先级队列等,但我得到的问题是非常基本的

    我脑子里几乎没有问题,我向团队询问过,但仍然没有得到满意的答案

    1. 当我们使用弹性搜索时,应该预期的最小负载是多少,如果我们只有1M记录,它就不会成为一种过度杀伤。
    2. 使用ES作为实时数据的真实来源是否真的有意义?
    3. ES是否设计用于处理类似关系的数据库,以及处理不断更新的数据? AFAIK这样的搜索优化数据库一次写入,多种读取类型。
    4. 如果我们这样做是为了处理负载,那么如何将MSSQL数据库集群作为事实来源并使用ES仅用于分析呢?
    5. 我想到的主要问题是,我们如何优化这种架构,以便我们能够更好地扩展?

      PS: 当我询问最小负载时,我真正想要的是什么是记录/事务的数量,我们可以说ES将比传统的关系数据库更快?或者根本没有这样的术语?

2 个答案:

答案 0 :(得分:2)

  
      
  1. 当我们使用弹性搜索时,应该预期的最小负载是多少,如果我们只有1M记录,它就不会成为一种过度杀伤。
  2.   

答案:可能的负载取决于服务器的功能

  
      
  1. 使用ES作为实时数据的真实来源是否真的有意义?
  2.   

来自ES网站:" Elasticsearch是一个分布式RESTful搜索和分析引擎,能够解决越来越多的用例。作为Elastic Stack的核心,它集中存储您的数据,以便您可以发现预期并发现意外情况。"

所以,是的,它可以是你的真相来源,它说,它是"最终是一致的"这引出了一个问题,它是多久被考虑的,实时的......并且没有测试和测量你的系统就无法回答它。

  
      
  1. ES是否设计用于处理类似关系的数据库,以及处理不断更新的数据? AFAIK这样的   搜索优化的数据库一次写入,多次读取。
  2.   

这是一个很好的观点,就像任何最终一致的系统一样,它确实没有针对一系列修改进行优化!

  
      
  1. 如果我们这样做是为了处理负载,那么与将MSSQL数据库集群作为事实来源和使用它的方式有何不同   ES仅用于解析?
  2.   

它没有赢。请记住,如上所述,ES的构建是为了满足搜索和分析的要求。如果那不是你打算用它做的,你应该考虑另一种工具。使用正确的工具来完成正确的工作。

答案 1 :(得分:1)

1) 没有最低预期负载。 您可以拥有2个小节点(主节点和数据),每个索引有2个分片(1个主节点和1个副本)。

如果从功能的角度来看(即如何搜索数据),您还可以将数据拆分为多个索引。

2) 根据我的经验,您从ElasticSearch获得的主要好处是:

  • 近线性可扩展性。
  • 基于Lucene的文本搜索。
  • 使数据发挥作用的多种方法:RESTful查询API,Kibana ......
  • 易于管理(与典型的RDBMS相比)。

如果您的项目没有获得这些好处,那么很可能ES不适合这项工作。

3) ElasticSearch不喜欢经常更新的数据。最佳用例是只读数据。

无论如何,这并不能解释你所获得的高延迟;你的问题必须在RabbitMQ或网络中。

4) 实际上,这就是我要做的:应用数据的MSSQL集群和分析的ES。