我正在编写一个不一定需要scaling abilities的应用程序,因为它在开始时不会收集大量数据.(然而,如果我幸运的话,我可能会沿着这条路走下go .)

我将在同一个盒子上运行我的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)

然而,使用MongoDB,我可以将6个表反规范化并展平为2个表/集合,并将我的查询最小化为可能只有1个查询,

users
blogs
    ->blog_album
    ->blog_tags        
    ->blog_notes
    ->blog_comments
    ->blog_author_participants

现在,使用MongoDB模式,将会有一些数据冗余.然而,硬盘空间比CPU/服务器便宜.

1.)这是使用MongoDB的好方案吗?

2.)当扩展到单个服务器之外时,使用MongoDB是否只会提高性能?

3.)使用MongoDB是否存在耐久性风险?我听说在执行insert时可能会丢失数据,因为insert首先写入内存,然后写入数据库.

4.)这是否应该阻止我在生产中使用MongoDB?

推荐答案

然而,使用MongoDB,我可以将6个表反规范化并扁平化为2个表/集合,并将查询最小化为可能只有1个查询

但是,您可以通过一条精心编制的SQL语句,轻松地在MySQL中查询与一篇博文相关的6个表的信息.

然而,硬盘空间比CPU/服务器便宜.

如果性能和可扩展性是一个优先事项,那么您需要考虑是否有足够的RAM将所有内容装入主内存,以及是否有足够的CPU内核来运行查询.企业级RAID 10数组是一项要求,请不要误会,但一旦您的数据库软件(MongoDB或MySQL)需要扫描一个无法放入主内存的索引,假设有一个大型活动数据库,您将陷入痛苦的世界.:)

我喜欢MongoDB,但在我看来,它最大的优点是map/reduce及其文档定向.这两种功能都不需要.MySQL在大规模部署中经过了时间测试,并且支持分区(但我认为您的数据库必须在50-100GB之间,然后才能从分区中获得可观的yield ,而不是使用一台内存为数吨(64GB+)的服务器(外加被动备份).我还认为,如果性能确实是一个问题,那么MySQL将是更好的 Select ,因为您将拥有对索引的最高控制权.

这并不是说MongoDB的性能不高,但它的地位可能不是为博客服务.你对插入的关注也是正确的.MongoDB不是MongoDB系统.谷歌在这两个系统中的交易进行了比较.

Mysql相关问答推荐

带有值分隔的MySQL分组不起作用

亚马逊RDS MySQL-无法';t执行';使用读取锁定刷新表';

MySQL 计数出现的百分比大于

避免多个SQL查询的重构代码

MySql SELECT 查找包含数字的区间的时间复杂度是多少?

高效的 SQL 查询,用于计算半小时时间序列中已发生的行的一部分

优化解析 5000 万行 MySQL 表的请求

如何在 axios 请求中将更新的设置状态值作为参数传递

SQL使用LIMIT获取结果和结果中的行数

如何让连续 3 周或以上的用户有订单?

如何显示患者预约中的专业人员姓名?

MySQLi count(*) 总是返回 1

MySql 以秒为单位的两个时间戳之间的差异?

从 MYSQL 查询中计算列的平均值

Amazon RDS Aurora 与 RDS MySQL 与 EC2 上的 MySQL?

我应该使用什么列数据类型来存储大量文本或 html

判断多个列的一个值

使用 MySql,我可以对列进行排序但最后有 0 吗?

查询以显示所有表及其排序规则

带有 MySQL 数据库的 Python 3.4.0