MongoDB利润的用例

时间:2013-12-09 08:39:15

标签: oracle mongodb rdbms database nosql

美好的一天。我正在攻读“实现分布式NoSQL数据库”的硕士学位。在研究了比较NoSQL数据库的强度和弱点的材料与RDBMS相比,我面临着选择要解决的正确问题的步骤。我的任务是展示由Oracle和MongoDB支持的同一应用程序的典型开发,并表明在应用程序发展过程中,Mongo开始超越Oracle。我专注于许多写入和水平缩放。作为我的任务,我选择了一个典型的Twitter应用程序,其中包含复杂的进化域,Java和Spring Data作为我的工具。


我要求有经验的人为受益的评论家和替代任务表明对Mongo的青睐。我明白它高度依赖于架构,索引等,我仍然会问 我的场景中的Mongo可以通过以下方式击败Oracle:

  1. 许多写作
  2. 水平缩放
  3. 阅读操作
  4. 架构演变
  5. 拆分\复制

2 个答案:

答案 0 :(得分:2)

  

我的任务是展示由Oracle和MongoDB支持的同一应用程序的典型开发,并表明在应用程序发展过程中,Mongo开始超越Oracle。

我很抱歉非常坦率,但是什么样的学术工作从最终答案开始,你想要对这个问题进行逆向工程?!这不是毫无价值,因为它故意误导。

暂且不说,这里有一些提示:

  • 在关系数据库中使用需要JOIN的内容,但可以将其建模为单个文档。我会想到博客文章。常见技巧包括将作者姓名放入文档中。阅读不需要JOIN,如果作者更改了他的名字(这在大多数系统中很少发生),你只需要一个像他的电子邮件地址这样的独特属性来更新名称:

    {
      title: "...",
      content: "...",
      date: "...",
      author: { name: "...", email: "..." },
      comments: [
        { name: "...", email: "...", text: "...", date: "..." },
        ...
      ]
    }
    
  • 保持您的数据足够小,以便它们适合RAM。 MongoDB可以很好地利用它,并且只会偶尔将信息刷新到磁盘(取决于您的配置),出于耐久性原因(符合ACID),RDBMS将始终使用磁盘。

  • 使用“不安全”的连接设置。不要等待数据库实际处理请求,而是立即返回(像UDP一样忘掉)。这在事务系统中是不可能的。如果您在云中进行测试,例如在EBS支持的具有非常高的磁盘延迟的EC2实例上,您可以放大这一点。
  • 使用像Hibernate这样非常重的ORM。可能避免使用像Morphia这样的ODM(对象文档映射器)(如果你是用Java做的)并使用普通的Java驱动程序 - 即使我不确定性能增益有多大,但我确信有一些如果做得好。
  • 在MongoDB中使用复制并允许从辅助节点读取(从而牺牲一致性但获得性能)。
  • 使用分片。
  • 除了系统性能之外,您可能还想了解一下开发人员的工作效率。 MongoDB很适合入门,我觉得开始使用起来要快得多。从长远来看,不确定这是否会发生相反的变化 - 从长远来看,严格的模式确实占据了一席之地。

我宁愿比较MySQL和MongoDB。这两个都是开源软件,非常相似。例如索引完全相同 - 只有b树(如果你坚持使用标准的磁盘存储引擎)。

最后的注意事项:我希望你能同意我的观点,即赢得这样一个不平衡的比较很容易,这让它变得毫无意义......

答案 1 :(得分:1)

点击此链接,我认为您将在此链接下找到所需信息

NoSql vs Relational database