dez*_*dez 47 mysql database database-design relational-database mongodb
我正在编写一个不一定需要扩展能力的应用程序,因为它不会在开始时收集大量数据.(但是,如果我很幸运,我可能会在路上行驶.)
我将在同一个盒子上运行我的Web服务器和数据库(现在).
话虽如此,我正在寻找性能和效率.
我的应用程序的主要部分将是加载博客文章.使用RDBMS(MySQL)我将进行6次查询(其中2个查询是连接),只是为了加载一个博客文章页面.
select blog
select blog_album
select blog_tags
select blog_notes
select blog_comments (join with users)
select blog_author_participants (join with users)
Run Code Online (Sandbox Code Playgroud)
但是,使用MongoDB,我可以对6个表进行反规范化并将其展平为仅2个表/集合,并将我的查询最小化为可能只有一个查询,
users
blogs
->blog_album
->blog_tags
->blog_notes
->blog_comments
->blog_author_participants
Run Code Online (Sandbox Code Playgroud)
现在,使用MongoDB架构,将会有一些数据冗余.但是,硬盘空间比CPU /服务器便宜.
1.)这是一个使用MongoDB的好方案吗?
2.)在扩展到单个服务器之外时,您是否只在使用MongoDB时获益?
3.)使用MongoDB是否存在任何持久性风险?我听说在执行插入时可能会丢失数据 - 因为insert首先写入内存,然后写入数据库.
4.)这是否会阻止我在生产中使用MongoDB?
Dan*_*man 32
当您拥有与其优势相匹配的用例时,您将使用MongoDB.
您是否需要无架构的文档存储?不,你有一个稳定的架构.
你需要自动分片吗?不,您没有非常的数据需求或横向扩展硬件的预算.
您需要地图/减少数据处理吗?不适合像博客这样的东西.
那你为什么还在考虑呢?
MDa*_*ubs 22
但是,使用MongoDB,我可以对6个表进行去规范化并将其展平为2个表/集合,并将查询最小化为可能只有1个查询
但是,通过一个精心设计的SQL语句,您可以轻松地在MySQL中查询与单个博文相关的6个表的信息.
但硬盘空间比CPU /服务器便宜.
如果性能和扩展是一个优先级,那么您将关注拥有足够的RAM以使所有内容适合主内存和足够的CPU内核来运行查询.企业级RAID 10阵列是必需的,不要误会我的意思,但是一旦你的数据库软件(MongoDB或MySQL)需要扫描一个不能适合主内存的索引,你就会进入一个世界假设一个大的活动数据库的痛苦.:)
我喜欢MongoDB,但在我看来它的强大之处在于map/reduce和它的面向文档.您既不需要这些功能.MySQL在大规模部署中经过时间考验并支持分区(但我认为你的数据库必须大约为50-100 GB才能实现分区与单个(加上被动备份)服务器的大量收益.吨(64 GB +)的RAM.我还会争辩说,如果性能确实是一个问题,那么MySQL会更好,因为你可以对索引拥有最高的控制权.
这并不是说MongoDB不是高性能,但它的位置可能不是为博客提供服务.您对插入的关注也是有效的.MongoDB不是ACID系统.谷歌交易在两个系统中进行比较.
gus*_*idd 12
这是一个很好的解释:http://mod.erni.st/nosql-if-only-it-was-that-easy/
最后一段总结了它:
我打算如何构建我的下一个应用程序?可能是Postgres.我会使用NoSQL吗?也许.我也可以使用Hadoop和Hive.我可能会把所有内容保存在平面文件 也许我会开始攻击磁悬浮.我将使用最适合这份工作的东西.如果我需要报告,我将不会使用任何NoSQL.如果我需要缓存,我可能会使用Tokyo Tyrant.如果我需要ACIDity,我不会使用NoSQL.如果我需要大量的计数器,我会使用Redis.如果我需要交易,我会使用Postgres.如果我有一大堆单一类型的文件,我可能会使用Mongo.如果我每天需要写10亿件物品,我可能会使用Voldemort.如果我需要全文搜索,我可能会使用Solr.如果我需要对volatile数据进行全文搜索,我可能会使用Sphinx.
在你决定是否可以使用之前,我建议你先阅读一下NoSQL是什么以及它做了什么.您无法将普通数据库转换为NoSQL,就像那样.处理数据的方式完全不同.
NoSQL绝对有其用途.但它绝对不是一切的答案.NoSQL的主要优点是易于更改的数据模型.
使用mongodb的优点(根据文章Moshe Kaplan
发表)dzone
MongoDB的满足Consistency
和Partitioning
要求,CAP理论(一致性,可用性和分区)
相关的SE问题:
与关系数据库相比,使用像MongoDB这样的无模式数据库有什么好处?