【问题标题】:NoSQL Databases for clients and transaction management用于客户端和事务管理的 NoSQL 数据库
【发布时间】:2017-08-25 11:23:57
【问题描述】:

我假装使用nodejs+express+angular构建了一个内网门户,但是我想知道MongoDB是否是数据库的好选择。

  • 用户必须报告他们的工作时间,以便以后向客户提交发票

  • 必须管理(添加、编辑、删除)客户端

  • 我将不得不显示带有发票价值、顶级客户等的仪表板。 (通过执行算术函数)

是否容易将小时记录中的客户 ID 与客户本身关联起来?

或者我应该使用 MySQL 之类的 SQL 数据库吗?

我需要基于性能可扩展性等的事实。

当我的 NoSQL DB 变大时会发生什么?它会失去性能吗?

【问题讨论】:

  • 您是在谈论表中的数百万行吗?如果不是,那么“性能”和“可扩展性”就无关紧要了。如果您了解 SQL,请使用 RDBMS;不是,而是使用 NoSQL 重新发明那个轮子。
  • 是的@RickJames 最终它将在某个阶段拥有数百万行。我想我会使用 rbdms,因为我更舒服。

标签: mysql mongodb scalability database-performance


【解决方案1】:

我的经验:过去 2 年 5 个月我一直在使用 MongoDB 和 Mysql。

我在这里写的一切都将来自我的个人观点和经验。

现在 MongoDB(一般来说是 NoSQL)是每个人都在谈论 mongoDB、couchDB、MEAN 堆栈等的流行词……这就是我们开始它的原因,这就是发生的事情:
我们找到了一个非常适合 mongodb 的项目:

  1. 我们拥有非常庞大的用户群

  2. 存在很多相互依赖关系 在我们的实体对象之间,即实体 A 不能没有实体 B 所以我们决定嵌入依赖实体。

我们仍然在同一个项目中使用 MongoDB,但是我们的数据库设计与我们最初的数据库设计(按照 mongodb 原则设计)有很大不同:

  1. 我们的应用程序变得非常慢,因为有时我们想要获取数据 来自多个集合,而 mongodb 不允许我们(现在它 从版本 >= 3.2 开始支持)。因此我们要加入我们的 以编程方式服务层。
  2. 由于嵌入,加载数据库实体变得非常繁重 文档,所以我们必须将所有嵌入的文档移动到单独的 收藏品。因此我们的数据库设计现在非常扁平(即看起来 像关系数据库设计)。

  3. 我们在我们的数据库中发现了很多孤立的数据;最初我们 认为我们可以在我们的回购/服务上实现我们的数据完整性 层,但很明显我们的实现并不完美 有时我们直接在数据库控制台上运行 mongo 查询,所以 我们实际上是在弄乱我们的数据,而 mongodb 保持沉默 嘲笑我们:)

  4. 在完成应用程序的大部分功能后,我们专注于 写报告并对我们的数据进行分析,我们发现了我们的 mongodb 查询变得非常庞大且难以管理;我们相信 使用 mysql 之类的关系数据库可以缓解这种情况。

当我开始使用 MongoDB 时,我对它非常着迷,但在我知道如何使用它之后:

  1. 它不会抱怨数据完整性违规。其实你 如果需要,可以将 Car 实例插入到 Employee 集合中:D
  2. 如果你有好的javascript特别容易学习 背景;您不必学习 SQL 等数据库语言。全部 mongo 查询是 js 函数和对象的组合。
  3. 您可以在几周或几个月内完成一个应用程序;实际上 我们在 3 个月内完成了我们的应用(非常复杂的应用)。

但是现在我们有一个类似的项目,我们选择了Mysql而不是Mongodb;我们本可以复制旧项目并在几周内完成它,但我们吸取了教训。如果您真的关心您的应用程序(即您的数据),请选择 Mysql(任何关系数据库)。

我们只将MongoDB用于旧项目和Kibana(因为它是用于日志记录的,我们不太关心我们的日志数据)

谁说Mysql没有规模? Facebook is using 1,800 mysql servers!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多