【问题标题】:Would MongoDB be a good fit for my industry?MongoDB 是否适合我的行业?
【发布时间】:2011-09-21 14:15:03
【问题描述】:

我在促销产品行业工作。我们出售几乎所有您可以打印、刺绣、雕刻或任何其他定制方法的东西。流行的产品是钢笔、马克杯、衬衫、帽子等。因为我们有如此多的产品种类,存储有关这些产品的信息,包括所有可能的产品选项、装饰选项以及所有相关的额外费用,变得非常复杂。如此之多,以至于尽管许多人都尝试过,但没有人能够以这样一种方式提供行业产品数据,即您可以通过算法将数据转换为电子商务商店,而无需一定程度的数据按摩。将这些信息正确地存储在关系数据库中似乎几乎是不可能的。 我很好奇 MongoDB 或任何其他 NoSQL 选项是否允许我以比 MySQL 等 RDBMS 更好地更好地存储和操作我们的产品信息的方式对信息进行建模。 该公司我工作的年龄已超过 100 年,并且多年来一直在 AS400 上使用 DB2。我需要一些充分的理由来说服他们使用非关系数据库解决方案。


我们行业中使用的一个常见示例产品是 Bic Clic Stic Pen,它有超过 20 种颜色可供选择,每种颜色可用于笔筒和装饰颜色。丝印装饰有更多颜色可供选择。然后,您可以选择要使用的墨水类型的其他选项。包装有多种选择。选择完所有这些后,您就有了加急处理的附加选项。所有这些选项可能有也可能没有额外费用,具体取决于您订购的笔数量或装饰中的颜色数量。定价通常基于数量,因此订购 250 支钢笔比订购 1000 支钢笔的成本更高。同样,订购 1000 支钢笔的额外费用会比订购 250 支钢笔便宜。

【问题讨论】:

  • 如果您不知道为什么需要非关系数据库并认为将数据库存储在关系数据库中“几乎不可能”,那么您需要一本 Celko 书,而不是 Mongo DB。非关系型数据库有其用途,但避免学习如何使用关系型数据库并不是其中之一。

标签: mongodb database-design relational-database nosql


【解决方案1】:

不想听起来刺耳,这是一个灵丹妙药的问题。

您拥有一个天生复杂的业务领域。我不清楚存储数据的不同方式是否会对这种复杂性产生任何影响——如果客户订购的数量超过 250 个,存储文档而不是关系数据可能不会更容易将你的笔定价为 0.02 美元。

我建议专注于业务领域,而不要过多担心存储机制。我是领域驱动设计的忠实粉丝——这听起来像是这种方法的完美案例。

【讨论】:

    【解决方案2】:

    使用文档数据库并不能完全解决您的问题,但它可能会有所帮助。

    如果您的文档代表产品的可用选项和该产品的订单,在大多数情况下,您将访问整个文档 - 这不是您无法使用 SQL 执行的操作,而是非常适合文档数据库。由于文档的结构是灵活的,因此在不更改数据库的情况下,将文档内的对象定义为复杂类型以定义特定的选项或规则相对容易。

    但是,这只对数据有帮助 - 您真正的问题出在 UI 方面。这两个文档一起直接映射到订单表格,但是无论您使用什么方法来定义选项/规则,一些产品最终都会得到极其复杂的设置页面。

    【讨论】:

      【解决方案3】:

      是的,MongoDB 正是您所需要的。它没有严格的文档结构,因此您可以创建所需的模型集,并将它们以您需要的任何顺序和组合嵌入到您的产品页面中。实际上它可以在不直接描述真实模型字段的情况下使用这些数据,因此我(例如)可以使用我的 Rails 应用程序根本不知道的字段。

      此外,MongoDB 非常容易设置用于复制和分片。它还支持 GridFS 虚拟文件系统,因此您可以将产品图像与描述它们的文档一起存储并轻松地将它们作为单个对象进行操作。

      你一定要试一试。

      UPD:无论如何,最好将 RDBMS 用于财务数据和处理数字,例如销售分析的分组报告等。 NoSQL 基础在这方面不是很擅长。

      【讨论】:

        猜你喜欢
        • 2010-09-25
        • 1970-01-01
        • 2011-12-19
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 2018-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多