ElasticSearch vs MongoDB vs Cassandra用于邮件日志

时间:2019-06-26 16:59:12

标签: mongodb elasticsearch cassandra system-design

我有一个邮件系统,每天我们发送1-2十万个邮件,然后存储这些邮件的所有点击/打开操作。

目前在MySQL中工作正常。

但是现在随着流量的增加,我们面临Mysql的一些性能问题。

因此,我们正在考虑转向Elastic / Cassandra / Mongo。

我可能的查询包括 a)获取已打开/未单击特定邮件的用户。 b)计算邮件的打开率/点击率

我认为cassandra可能并不完美,因为它非常适合具有高并发写入但读取查询较少的应用程序。

这里有很多类型的读取查询,因此将很难决定分区键/集群,因此mzny聚合也将在cassandra上运行。

在这种情况下我们应该使用什么?为什么?

无论如何,我们都在研究Elastic / Mongo两者的数据模型,然后围绕它运行一些基准测试。

2 个答案:

答案 0 :(得分:0)

ELK堆栈(Elastic Search,LogStash,Kibana)是最好的解决方案。就我使用过ELK堆栈而言,它的日志处理速度很快。

Cassandra绝对不是正确的选择。

您可以使用MongoDB,因为大多数查询都是GET查询。

但是我有几点要说,为什么弹性搜索在日志处理方面胜过Mongo。

  1. 全文搜索:Elastic Search实现了许多功能,例如自定义将文本拆分为单词,自定义词干,多面搜索等。

  2. 模糊搜索:模糊搜索非常适合拼写错误。即使您有拼写错误,也可以找到要搜索的内容。

  3. 速度:弹性搜索能够极其快速地执行复杂的查询。

顾名思义,弹性搜索是出于搜索目的而进行的。而且在mongo中搜索不如弹性搜索那么快。

但是维护弹性搜索也有其自身的问题。

请参阅: https://apiumhub.com/tech-blog-barcelona/elastic-search-advantages-books/ https://interviewbubble.com/elasticsearch-pros-and-cons-advantages-and-disadvantages-of-elasticsearch/

谢谢,我认为这会有所帮助。

答案 1 :(得分:0)

如果我尝试查看您的数据结构和数据访问模式,则似乎每个消息都有一个消息ID,它是内容,然后随之而来的是许多计数器,每次更新有人打开它,也许有些信息,例如打开它的人的用户ID /电子邮件。

由于这些记录在每次打开电子邮件时都会更新,因此我相信写的数量相当多。假设每封邮件平均每天打开10次,则每天将有10-20万封邮件和1-2万封电子邮件的邮件。

将其与读取进行比较,我不确定您的读取模式,但是如果将其用于分析目的或在某些仪表板中显示,则一天可能会读取几次。与写入相比,读取基本上是很低的。

也就是说,如果您的读取查询模式是始终使用消息ID进行查询的形式,那么Cassandra / Hbase是您的最佳选择。 如果不是这种情况,并且您有不同类型的查询,或者您想进行很多分析,那么我希望使用Mongo DB。

弹性搜索并不是真正的数据库,它更像是一个查询引擎。在很多情况下,ES中都会发生数据丢失。如果您打算将其保留为主数据存储,那么Elastic Search / ELK并不是一个不错的选择。

您可以看一下this video to help come to a conclusion on which DB is best given what scenarios. 或者,摘要为@ CodeKarle's website