Jam*_*son 55 database database-design mongodb cassandra nosql
我正在研究一个非常注重性能的实时广告平台.我一直用MySQL开发,但是如果能够实现显着的速度提升,我愿意尝试像MongoDB或Cassandra这样的新东西.我一直在阅读这两天,但由于两者都在快速发展,很多信息似乎有些过时了.
存储的主要数据是每次点击的条目,视图的递增行和每个广告系列的信息(只是一些基本设置等).需要在插入点击,更新视图总数和生成实时统计报告时找到速度增益.该平台是用PHP开发的.
或许这些都没有?
Bri*_*tle 36
有几种方法可以通过列出的所有技术实现这一目标.这更像是你如何使用它们的问题.您的理想解决方案可以结合使用这些,并考虑使用模式.我觉得那里的信息没有过时,因为现在的概念非常重要.可能有新的NoSQL数据库和现有的数据库修复,但您的问题主要是架构.
像MongoDB和Cassandra这样的NoSQL解决方案因其插入性能而备受关注.人们倾向于抱怨关系数据库的更新/插入性能,但有一些方法可以缓解这些问题.
从MySQL开始,您可以查看O'Reilly的高性能MySQL,优化架构,添加更多内存,或者在应用程序的其余部分(假设您使用MySQL)或分区/分片数据的不同硬件上运行此内存.另一个需要考虑的方面是您的申请.您可以在插入数据库之前在应用程序级别对插入和更新进行排队吗?这将为您提供一些灵活性,并且在所有情况下都可能有用.根据最终模式的外观,只要您熟悉SQL,MySQL就会为您提供一些提取数据的帮助.如果您需要使用第三方报告工具等,这是一个好处.
MongoDB和Cassandra是不同的野兽.我的理解是,向后者添加节点更容易,但是由于MongoDB内置了复制等功能,因此已经发生了变化.这两个平台的插入不受与关系数据库相同的约束.拉出数据也很快,并且您在数据格式更改方面具有很大的灵活性.权衡是您不能使用SQL(对某些人来说是一种好处),因此获取报告可能会更棘手.没有什么可以阻止您在其中一个平台中收集数据,然后将其导入MySQL数据库以进行进一步分析.
根据您的要求,您应该查看NoSQL数据库以外的工具,例如Flume.这些利用了广泛用于分析的Hadoop平台.对于您正在做的事情,这些可能比数据库具有更大的灵活性.您可能会感兴趣的是Hadoop World的一些内容.
sir*_*mak 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
Rya*_*lor 21
MySQL的特点:
卡桑德拉的特点:
Cassandra是键值或基于文档的存储.想想这意味着什么.通常我给Cassandra ONE KEY,然后我回来了一个DATASET.它可以从那里分支出来,但这基本上是正在发生的事情.这更像是访问静态文件.当然,你可以有多个索引,计数器字段等,但我正在进行推广.这就是卡桑德拉的来源.
MySQL和SQL基于组/集理论 - 它有一种方法来组合数据集之间的任何关系.获取MySQL查询,使查询成为"密钥"并将响应变为"值"并将其存储到Cassandra(例如,使Cassandra成为缓存)非常容易.这可能有助于解释权衡,MySQL允许您只需编写不同的查询就可以重新排列数据表和数据集之间的关系.卡桑德拉不是那么多.并且知道虽然Cassandra可能会提供一些功能来完成这些工作,但它并不是为它而构建的.
MongoDB和CouchDB适合处于这两个极端的中间位置.我认为MySQL可能有点冗长和烦人,特别是在处理可选字段时,如果没有好的模型或工具,则会进行迁移.同样具有可扩展性,我确信有很多用于扩展MySQL数据库的技术,但由于其功能集的限制,Cassandra将始终可以轻松扩展.MySQL有点无限.但是,NoSQL和Cassandra 不进行连接,这是SQL的一个关键功能,它允许在单个查询中组合多个表.因此,复杂的关系查询不会在Cassandra中扩展.
小智 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/
佩里克鲁格
小智 5
Cassandra vs. MongoDB您是否正在考虑将Cassandra或MongoDB作为下一个项目的数据存储?您想比较两个数据库吗?Cassandra和MongoDB都是“ NoSQL”数据库,但事实是它们非常不同。它们具有不同的优势和价值主张,因此任何比较都必须是细微的差别。让我们从最初的需求开始……这些数据库都不能代替RDBMS,它们也不是“ ACID”数据库。因此,如果您有一个以标准化和一致性为主要要求的事务性工作负载,那么这些数据库都不适合您。您最好还是坚持使用传统的关系数据库,例如MySQL,PostGres,Oracle等。现在我们有了关系数据库,让我们考虑一下Cassandra和MongoDB之间的主要区别,这将有助于您做出决定。在本文中,我将不讨论特定功能,但会指出一些高级策略差异以帮助您做出选择。
结论:如果您的问题域需要丰富的数据模型,则MongoDB更适合您。
结论:如果您的应用程序需要二级索引并且需要查询模型的灵活性,那么MongoDB更适合您。
结论:如果您需要100%的正常运行时间,那么Cassandra更适合您。
结论:如果您需要写可伸缩性,那么Cassandra更适合您。
结论:如果您需要查询语言支持,那么Cassandra更适合您。
性能基准让我们谈谈性能。此时,您可能希望对数据库进行性能基准比较。在比较中,我故意不包括性能基准。在任何比较中,我们都必须确保我们进行了苹果对苹果的比较。
数据库模型-被测试的应用程序的数据库模型/架构有很大的不同。有些架构非常适合MongoDB,有些架构非常适合Cassandra。因此,在比较数据库时,使用对两个数据库都适用的模型非常重要。
要记住的最后一件事是基准负载可能反映也可能不会反映应用程序的性能。因此,为了使基准测试有用,找到反映应用程序性能特征的基准测试负载非常重要。以下是您可能需要查看的一些基准:-NoSQL性能基准-Cassandra,MongoDB,Couchbase,HBase
结论:两者都很容易使用和扩展。
本机聚合MongoDB具有内置的聚合框架,可运行ETL管道来转换存储在数据库中的数据。这对中小型作业非常有用,但是随着您的数据处理需求变得更加复杂,聚合框架将变得难以调试。Cassandra没有内置的聚合框架。为此使用了Hadoop,Spark等外部工具。
无模式的模型在MongoDB中,您可以选择不对文档实施任何模式。尽管在较新版本的先前版本中这是默认设置,但是您可以选择对文档强制执行架构。MongoDB中的每个文档可以具有不同的结构,并且由您的应用程序来解释数据。尽管这与大多数应用程序无关,但在某些情况下,额外的灵活性很重要。较新版本(使用CQL作为默认语言)中的Cassandra提供了静态键入。您需要预先定义非常列的类型。
| 归档时间: |
|
| 查看次数: |
58022 次 |
| 最近记录: |