【问题标题】:NoSql data model for ecommerce电子商务的 NoSql 数据模型
【发布时间】:2014-03-08 04:14:30
【问题描述】:

我正在寻找一种适合数据数据库的最佳方法,该方法可以在产品/商店建议 + 产品订单项目中生成。

我提取了主要实体,这些实体在这样的项目中被操纵。

  1. costumer - 对客户数据(以前的订单)和他的朋友生成的数据(通过 facebook 等收集)执行产品建议,最好将其以图形格式显示,这将我带到了 neo4j 数据库。
  2. order - 这是简单的事情,但会写入太多的订单。订单生命周期是创建 -> 修改状态(准备好与否) -> 由商店读取 -> 删除。这意味着orders数据库的主要特点是写操作量大(写读比为3)。可能 DynamoDB 是完成这项任务的好选择。
  3. 商品 - 它们是非结构化的(不同的产品 - 不同的领域)并且属于某些类别(分层结构)。这个对 mongodb 有好处。
  4. shop - 关于商店的唯一信息是它的地理位置(如果商店是餐厅,那么顾客会想去它)。这也可以由 mongodb 处理。

经过这样的分析,我发现我需要 3 个不同模型的不同数据库:Neo4j、DynamoDB、mongoDB,这很奇怪。这个解决方案在您看来是否不错,或者您对此类任务有很好的建议(关系数据库也是可能的选择)。

【问题讨论】:

    标签: database nosql e-commerce


    【解决方案1】:

    您几乎已经正确识别了您的数据库,但在我看来,您绝对应该让某种关系 SQL 数据库来处理“订单”相关数据。由于订单信息可能是一条对任务至关重要的信息,并且需要本质上应该是原子的 CRUD 操作,因此 SQL 数据库在这些情况下被证明是非常可靠的。它们不仅保证原子性,还保证所有ACID 属性。可以使用transactions 将信息写入数据库!

    现在,其他 NoSQL 数据库确实也支持事务,但一般来说,您会希望您的“订单”数据库具有相当高的可靠性,而 SQL 可以向您保证。不要让任何人告诉您像 PostgreSQL 这样的数据库无法扩展和处理大量数据。事实上,出于所有意图和目的,您选择的任何 SQL 数据库都将很可能处理您向其发送的任何数量的数据(数百万行)。如果您确实达到了数据库给您带来性能瓶颈的地步,那么有很多方法可以扩展它们。

    现在,就您的非结构化“商品”信息而言,NoSQL 文档存储应该完全没问题。 MongoDB 将是完美的!

    产品建议和推荐通常适用于图形数据库。你绝对应该继续使用 Neo4j,我相信你会惊讶,或者已经惊讶于它是多么容易启动和运行!更不用说叠加社交图谱不需要额外的努力。

    对于具有地理位置的“商店”,您需要提供更多信息,说明您在此处尝试完成的任务以及您遇到的任何主要限制。据我所知,如果你对 Neo4j 感到满意(我想你会的),请查看 Neo4j spatial。在这里使用 Neo4j 的好处是,您可以轻松地将您的建议与地理位置相关联,而无需进行多个数据库连接所需的额外计算开销。其他关系和文档存储选项也可以作为存储地理位置的解决方案,但您必须做更多的研究,牢记您的限制。

    所有这一切中最重要的因素是,当您最终选择不同的数据库来表示各种信息时,您需要找到一种确保数据完整性的好方法。例如,mongo 集合中的用户 ID 需要以某种方式与 Neo4j 用户节点中的属性标志相关联。我很确定您将在这方面面临挑战,这些挑战将根据您的情况进行微调。但我敢肯定,当你到达那座桥时,你会越过它!

    您尽早花时间尝试使您的“模式”正确,这很好!最终得到回报!

    【讨论】:

    • 您好,感谢您的回答。我有几个问题。首先,您建议使用 SQL db 进行订单。订单是系统的关键部分,如果数据库崩溃,我不想让它丢失。 NoSql dbs 是否有机会丢失数据?交易也很好,但订单之间不相关,这意味着我想将它们推入数据库而没有任何锁,店主会经常扫描它们,所以我寻找数据库来满足这个需求。另一个问题是关于数据库完整性的——你知道任何保持一致性的工具吗?再次感谢您的回复,因为我迷失在这个 NoSql 世界中
    猜你喜欢
    • 2012-09-11
    • 2011-02-04
    • 2015-10-12
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多