实时广告平台MongoDB vs.Cassandra vs.MySQL

实时广告平台MongoDB vs.Cassandra vs.MySQL,mongodb,database-design,cassandra,database,nosql,Mongodb,Database Design,Cassandra,Database,Nosql,我在一个实时广告平台上工作,非常注重性能。我一直使用MySQL进行开发,但如果能够获得显著的速度提升,我愿意尝试一些新的东西,比如MongoDB或Cassandra。我整天都在读这两本书,但由于这两本书都在迅速发展,很多信息似乎有些过时 存储的主要数据是每次单击的条目、视图的增量行以及每个活动的信息(只是一些基本设置等)。速度的提高需要在插入点击、更新视图总数和生成实时统计报告中找到。该平台是用PHP开发的 或者这些都没有?通过列出的所有技术,有几种方法可以实现这一点。这更多的是你如何使用它们的

我在一个实时广告平台上工作,非常注重性能。我一直使用MySQL进行开发,但如果能够获得显著的速度提升,我愿意尝试一些新的东西,比如MongoDB或Cassandra。我整天都在读这两本书,但由于这两本书都在迅速发展,很多信息似乎有些过时

存储的主要数据是每次单击的条目、视图的增量行以及每个活动的信息(只是一些基本设置等)。速度的提高需要在插入点击、更新视图总数和生成实时统计报告中找到。该平台是用PHP开发的


或者这些都没有?

通过列出的所有技术,有几种方法可以实现这一点。这更多的是你如何使用它们的问题。您的理想解决方案可以结合使用这些方法,并考虑使用模式。我不认为信息已经过时了,因为这些概念是非常基本的。可能会有新的NoSQL数据库和对现有数据库的修复,但您的问题主要是架构问题

NoSQL解决方案,如MongoDB和Cassandra,因其插入性能而备受关注。人们倾向于抱怨关系数据库的更新/插入性能,但有办法缓解这些问题

从MySQL开始,您可以查看O'Reilly的,优化模式,添加更多内存,或者在与应用程序其余部分不同的硬件上运行(假设您使用MySQL),或者分区/碎片数据。另一个需要考虑的领域是您的应用程序。在插入数据库之前,能否在应用程序级别对插入和更新进行排队?这将给您一些灵活性,并且可能在所有情况下都很有用。根据最终模式的外观,只要您熟悉SQL,MySQL将在提取数据方面为您提供一些帮助。如果您需要使用第三方报告工具等,这是一个好处

MongoDB和Cassandra是不同的动物。我的理解是,将节点添加到后者更容易,但这已经发生了变化,因为MongoDB内置了复制等功能。这两种平台的插入并不像关系数据库那样受到约束。提取数据也很快,而且在数据格式更改方面有很大的灵活性。折衷的办法是不能使用SQL(对某些人来说这是一个好处),因此将报表导出可能更为棘手。没有什么可以阻止您在这些平台中收集数据,然后将其导入MySQL数据库进行进一步分析


根据您的需求,除了NoSQL数据库之外,您还应该查看其他工具,例如。它们利用了广泛用于分析的Hadoop平台。对于您正在做的事情,这些可能比数据库更具灵活性。您可能对其中的一些内容感兴趣。

Nosql解决方案比Mysql、postgresql和其他rdbms技术更适合此任务。不要在Hbase/Hadoop上浪费时间,你必须是一名宇航员才能使用它。我推荐MongoDB和Cassandra。Mongo更适合于小型数据集(如果您的数据最大比ram大10倍,否则您必须进行切分,需要更多的机器并使用副本集)。对于大数据;卡桑德拉是最好的。Mongodb比cassandra有更多的查询选项和其他功能,但mongo需要64位机器。双方都有一些分析方面的工作。两边都有原子计数器。两者都可以很好地扩展,但cassandra在扩展性和高可用性方面要好得多。两者都有php客户端,都有良好的支持和社区(mongo社区更大)

卡桑德拉分析项目示例:Rainbird

mongo样本:


双击开发人员开发的mongo

我还想将Membase(www.couchbase.com)添加到此列表中

作为一种产品,Membase已部署在多家广告公司(AOL广告、Chango、Delta项目等)。关于这些公司如何成功使用Membase,有许多公开案例研究和示例

虽然这当然值得商榷,但我们发现Membase比任何其他解决方案都能提供更好的性能和可扩展性。我们在索引/查询方面所缺乏的是,我们计划将CouchDB集成为新的持久化后端,以弥补这一不足

作为一家公司,Couchbase(Membase的制造商)拥有大量专门为广告/目标公司服务的知识和经验

我很乐意与您讨论这个特定的用例,看看Membase是否合适

请给我发一封电子邮件(perry-at-couchbase-dot-com)或访问我们的论坛:


Perry Krug

MySQL的特点:

  • 数据库锁定(金融交易更容易实现)
  • 一致性/安全性(如上所述,您可以保证,例如,在您读取银行帐户余额和更新它之间不会发生任何更改)
  • 数据组织/重构(在任何地方都可以有无组织的数据,但MySQL最好使用表示“类型”或“组件”的表,然后将它们组合到查询中——这称为规范化)
  • MySQL(和关系数据库)更适合于敏捷软件项目中常见的任意数据集和需求
卡桑德拉的特点:

  • 速度:用于简单检索大型文档。但是,它需要对高度相关的数据进行多个查询,“默认情况下”这些查询可能不一致(并且数据集可以在这些查询之间更改)
  • 可用性:与“一致性”相反。无论数据是否100%正确,数据始终可用。[1]
  • 可选字段(宽列):可以在