我正在研究一个非常注重性能的实时广告平台。我一直用MySQL开发,但如果能够实现显着的速度提升,我可以尝试像MongoDB或Cassandra这样的新东西。我一整天都在阅读,但由于两者都在迅速发展,很多信息似乎都有点过时了。
存储的主要数据是每次点击的条目,视图的递增行和每个广告系列的信息(只是一些基本设置等)。需要在插入点击,更新视图总数和生成实时统计报告时找到速度增益。该平台是用PHP开发的。
或许没有这些?
答案 0 :(得分:36)
有几种方法可以通过列出的所有技术实现这一目标。这更像是你如何使用它们的问题。您的理想解决方案可以结合使用这些,并考虑使用模式。我觉得那里的信息没有过时,因为现在的概念非常重要。可能有新的NoSQL数据库和现有的数据库修复,但您的问题主要是架构。
像MongoDB和Cassandra这样的NoSQL解决方案因其插入性能而备受关注。人们倾向于抱怨关系数据库的更新/插入性能,但有一些方法可以缓解这些问题。
从MySQL开始,您可以查看O'Reilly的High Performance MySQL,优化架构,添加更多内存,或者在应用程序的其余部分(假设您使用MySQL)或分区/分片的不同硬件上运行此内存数据。另一个需要考虑的方面是您的申请。您可以在插入数据库之前在应用程序级别对插入和更新进行排队吗?这将为您提供一些灵活性,并且在所有情况下都可能有用。根据最终模式的外观,只要您熟悉SQL,MySQL就会为您提供一些提取数据的帮助。如果您需要使用第三方报告工具等,这是一个好处。
MongoDB和Cassandra是不同的野兽。我的理解是,向后者添加节点更容易,但是由于MongoDB内置了复制等功能,因此已经发生了变化。这两个平台的插入不受与关系数据库相同的约束。拉出数据也很快,并且您在数据格式更改方面具有很大的灵活性。权衡是您不能使用SQL(对某些人来说是一种好处),因此获取报告可能会更棘手。没有什么可以阻止您在其中一个平台中收集数据,然后将其导入MySQL数据库以进行进一步分析。
根据您的要求,您应该查看NoSQL数据库以外的工具,例如Flume。这些利用了广泛用于分析的Hadoop平台。对于您正在做的事情,这些可能比数据库具有更大的灵活性。您可能会对Hadoop World中的一些内容感兴趣。
答案 1 :(得分:22)
Nosql解决方案比Mysql,postgresql和其他rdbms技术更适合此任务。不要浪费你的时间在Hbase / Hadoop上,你必须成为一名宇航员才能使用它。我推荐MongoDB和Cassandra。 Mongo对于小型数据集更好(如果您的数据最大比ram大10倍,否则您需要分片,需要更多机器并使用副本集)。对于大数据;卡桑德拉是最好的。 Mongodb有比cassandra更多的查询选项和其他功能,但你需要64位机器用于mongo。双方都有一些分析工作。双方都有原子计数器。两者都可以很好地扩展,但cassandra在扩展和高可用性方面要好得多。两者都有php客户端,都有很好的支持和社区(mongo社区更大)。
Cassandra分析项目示例:Rainbird http://www.slideshare.net/kevinweil/rainbird-realtime-analytics-at-twitter-strata-2011
mongo示例:http://www.slideshare.net/jrosoff/scalable-event-analytics-with-mongodb-ruby-on-rails
http://axonflux.com/how-superfeedr-built-analytics-using-mongodb
doubleclick开发人员开发了mongo http://www.informationweek.com/news/software/info_management/224200878
答案 2 :(得分:21)
MySQL的特点:
Cassandra的特点:
Cassandra是键值或基于文档的存储。想想这意味着什么。通常我给Cassandra ONE KEY,然后我回来了一个DATASET。它可以从那里分支出来,但这基本上是正在发生的事情。这更像是访问静态文件。当然,你可以有多个索引,计数器字段等,但我正在进行推广。这就是卡桑德拉的来源。
MySQL和SQL基于组/集理论 - 它有一种方法可以组合数据集之间的任何关系。获取MySQL查询,使查询成为“密钥”并将响应变为“值”并将其存储到Cassandra(例如,将Cassandra作为缓存)非常容易。这可能有助于解释权衡,MySQL允许您只需编写不同的查询就可以重新排列数据表和数据集之间的关系。卡桑德拉不是那么多。并且知道虽然Cassandra可能会提供一些功能来完成这些工作,但它不是为它而构建的。
MongoDB和CouchDB适合处于这两个极端的中间位置。我认为MySQL可能有点冗长和烦人,特别是在处理可选字段时,如果没有好的模型或工具,则会进行迁移。同样具有可扩展性,我确信有很多用于扩展MySQL数据库的技术,但由于其功能集的限制,Cassandra将始终可以轻松扩展。 MySQL有点无限。但是,NoSQL和Cassandra不会 进行连接,这是SQL的一个关键功能,它允许在单个查询中组合多个表。因此,复杂的关系查询不会在Cassandra中扩展。
答案 3 :(得分:5)
我还想将Membase(www.couchbase.com)添加到此列表中。
作为一种产品,Membase已部署在多家广告公司(AOL Advertising,Chango,Delta Projects等)。有许多公共案例研究以及这些公司如何成功使用Membase的例子。
虽然它肯定有争议,但我们发现Membase提供了比任何其他解决方案更好的性能和可扩展性。我们在索引/查询中缺少的是,我们计划的不仅仅是将CouchDB集成为新的持久性后端。
作为一家公司,Couchbase(Membase的制造商)拥有大量专门为广告/定位公司提供服务的知识和经验。
肯定会喜欢和你讨论这个特殊的用例,看看Membase是否合适。
请给我发一封电子邮件(perry -at-couchbase -dot- com)或在论坛上访问我们:http://www.couchbase.org/forums/
Perry Krug
答案 4 :(得分:5)
Cassandra与MongoDB 您是否正在考虑将Cassandra或MongoDB作为下一个项目的数据存储?你想比较两个数据库吗? Cassandra和MongoDB都是“NoSQL”数据库,但实际情况是它们非常不同。他们有不同的优势和价值主张 - 所以任何比较都必须是细致的。让我们从最初的要求开始......这些数据库都没有取代RDBMS,也不是“ACID”数据库。因此,如果您有一个事务性工作负载,其中规范化和一致性是主要要求,那么这些数据库都不适合您。你最好坚持使用传统的关系数据库,比如MySQL,PostGres,Oracle等。现在我们已经开始使用关系数据库了,让我们考虑一下Cassandra和MongoDB之间的主要区别,它们可以帮助你做出决定。在这篇文章中,我不打算讨论具体的功能,但会指出一些高级别的战略差异,以帮助您做出选择。
结论:如果您的问题域需要丰富的数据模型,那么MongoDB更适合您。
结论:如果您的应用程序需要二级索引并且在查询模型中需要灵活性,那么MongoDB更适合您。
结论:如果你需要100%的正常运行时间,Cassandra更适合你。
判决:如果写你的可扩展性是你的事,那么Cassandra更适合你。
结论:如果您需要查询语言支持,Cassandra最适合您。
绩效基准 我们来谈谈表演。此时,您可能期望对数据库进行性能基准比较。我故意没有在比较中包括性能基准。在任何比较中,我们必须确保我们进行一对一的比较。
数据库模型 - 正在测试的应用程序的数据库模型/模式有很大的不同。有些模式非常适合MongoDB,有些模式非常适合Cassandra。因此,在比较数据库时,使用对两个数据库都运行良好的模型非常重要。
要记住的最后一件事是基准负载可能会也可能不会反映您的应用程序的性能。因此,为了使基准测试有用,找到反映应用程序性能特征的基准负载非常重要。以下是您可能需要查看的一些基准测试: - NoSQL性能基准测试 - Cassandra vs. MongoDB vs. Couchbase vs. HBase
结论:两者都相当容易使用和提升。
原生聚合 MongoDB有一个内置的Aggregation框架来运行ETL管道来转换存储在数据库中的数据。这对于中小型作业非常有用,但随着数据处理需求变得更加复杂,聚合框架变得难以调试。 Cassandra没有内置的聚合框架。像Hadoop,Spark这样的外部工具就用于此。
无架构模型 在MongoDB中,您可以选择不对文档强制执行任何架构。虽然这是较新版本的先前版本中的默认值,但您可以选择为文档强制执行架构。 MongoDB中的每个文档都可以是不同的结构,由您的应用程序来解释数据。虽然这与大多数应用程序无关,但在某些情况下,额外的灵活性非常重要。较新版本的Cassandra(使用CQL作为默认语言)提供静态类型。您需要预先定义非常类型的列。
答案 5 :(得分:3)
我会将New Relic视为类似工作量的一个例子。他们每天捕获超过200亿个数据点到磁盘,并使用MySQL 5.6(Percona)作为后端。
此处提供博文: http://blog.newrelic.com/2014/06/13/store-200-billion-data-points-day-disk/