我有一个邮件系统,每天我们发送1-2十万个邮件,然后存储这些邮件的所有点击/打开操作。
目前在MySQL中工作正常。
但是现在随着流量的增加,我们面临Mysql的一些性能问题。
因此,我们正在考虑转向Elastic / Cassandra / Mongo。
我可能的查询包括 a)获取已打开/未单击特定邮件的用户。 b)计算邮件的打开率/点击率
我认为cassandra可能并不完美,因为它非常适合具有高并发写入但读取查询较少的应用程序。
这里有很多类型的读取查询,因此将很难决定分区键/集群,因此mzny聚合也将在cassandra上运行。
在这种情况下我们应该使用什么?为什么?
无论如何,我们都在研究Elastic / Mongo两者的数据模型,然后围绕它运行一些基准测试。
答案 0 :(得分:0)
ELK堆栈(Elastic Search,LogStash,Kibana)是最好的解决方案。就我使用过ELK堆栈而言,它的日志处理速度很快。
Cassandra绝对不是正确的选择。
您可以使用MongoDB,因为大多数查询都是GET查询。
但是我有几点要说,为什么弹性搜索在日志处理方面胜过Mongo。
全文搜索:Elastic Search实现了许多功能,例如自定义将文本拆分为单词,自定义词干,多面搜索等。
模糊搜索:模糊搜索非常适合拼写错误。即使您有拼写错误,也可以找到要搜索的内容。
速度:弹性搜索能够极其快速地执行复杂的查询。
顾名思义,弹性搜索是出于搜索目的而进行的。而且在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