我正在与一个使用两个数据源的团队合作。
e.g。如果我下了订单,订单会插入到DB中,然后有一个RabbitMQ监听器/ Batch,然后将数据从DB同步到ES。
不知何故,这个系统甚至只有一百万条记录就失败了。当我说失败时,这意味着记录不会及时在ES中更新,例如假设我创建优惠券,然后优惠券在DB中生成,当优惠券生成时,客户会尝试立即兑换优惠券,尽管ES还没有关于优惠券的信息,所以它失败了。当然有选择使用RabbitMQ的优先级队列等,但我得到的问题是非常基本的
我脑子里几乎没有问题,我向团队询问过,但仍然没有得到满意的答案
我想到的主要问题是,我们如何优化这种架构,以便我们能够更好地扩展?
PS: 当我询问最小负载时,我真正想要的是什么是记录/事务的数量,我们可以说ES将比传统的关系数据库更快?或者根本没有这样的术语?
答案 0 :(得分:2)
- 当我们使用弹性搜索时,应该预期的最小负载是多少,如果我们只有1M记录,它就不会成为一种过度杀伤。
醇>
答案:可能的负载取决于服务器的功能
- 使用ES作为实时数据的真实来源是否真的有意义?
醇>
来自ES网站:" Elasticsearch是一个分布式RESTful搜索和分析引擎,能够解决越来越多的用例。作为Elastic Stack的核心,它集中存储您的数据,以便您可以发现预期并发现意外情况。"
所以,是的,它可以是你的真相来源,它说,它是"最终是一致的"这引出了一个问题,它是多久被考虑的,实时的......并且没有测试和测量你的系统就无法回答它。
- ES是否设计用于处理类似关系的数据库,以及处理不断更新的数据? AFAIK这样的 搜索优化的数据库一次写入,多次读取。
醇>
这是一个很好的观点,就像任何最终一致的系统一样,它确实没有针对一系列修改进行优化!
- 如果我们这样做是为了处理负载,那么与将MSSQL数据库集群作为事实来源和使用它的方式有何不同 ES仅用于解析?
醇>
它没有赢。请记住,如上所述,ES的构建是为了满足搜索和分析的要求。如果那不是你打算用它做的,你应该考虑另一种工具。使用正确的工具来完成正确的工作。
答案 1 :(得分:1)
1) 没有最低预期负载。 您可以拥有2个小节点(主节点和数据),每个索引有2个分片(1个主节点和1个副本)。
如果从功能的角度来看(即如何搜索数据),您还可以将数据拆分为多个索引。
2) 根据我的经验,您从ElasticSearch获得的主要好处是:
如果您的项目没有获得这些好处,那么很可能ES不适合这项工作。
3) ElasticSearch不喜欢经常更新的数据。最佳用例是只读数据。
无论如何,这并不能解释你所获得的高延迟;你的问题必须在RabbitMQ或网络中。
4) 实际上,这就是我要做的:应用数据的MSSQL集群和分析的ES。