Database 面向电子商务的NoSql数据模型

Database 面向电子商务的NoSql数据模型,database,nosql,e-commerce,Database,Nosql,E Commerce,我正在寻找一个最佳的方式,以适应数据数据库,可以在产品/商店建议+产品订单项目生产 我提取了在这样一个项目中被操纵的主要实体 客户-要对客户数据(以前的订单)和朋友制作的数据(通过facebook等收集)执行产品建议,最好将其设置为图形格式,这将我带到neo4j数据库 订单-这是简单的事情,但它将是太多的订单写。订单生命周期为创建->修改状态(就绪或未就绪)->按车间读取->删除。这意味着orders数据库的主要特点是大量的写操作(读写比为3)。也许DynamoDB是这个任务的好选择 商品-它们

我正在寻找一个最佳的方式,以适应数据数据库,可以在产品/商店建议+产品订单项目生产

我提取了在这样一个项目中被操纵的主要实体

  • 客户-要对客户数据(以前的订单)和朋友制作的数据(通过facebook等收集)执行产品建议,最好将其设置为图形格式,这将我带到neo4j数据库
  • 订单-这是简单的事情,但它将是太多的订单写。订单生命周期为创建->修改状态(就绪或未就绪)->按车间读取->删除。这意味着orders数据库的主要特点是大量的写操作(读写比为3)。也许DynamoDB是这个任务的好选择
  • 商品-它们是非结构化的(不同的产品-不同的领域),属于某些类别(层次结构)。这一个对mongodb有好处
  • 商店-商店的唯一特点是地理位置(如果商店是一家餐馆,顾客会更愿意去参观)。这也可以由mongodb处理

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

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

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

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

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

    对于具有地理位置的“商店”,您需要提供更多信息,以了解您在这里试图实现的目标以及存在的任何主要限制。据我所知,如果你对Neo4j感到满意(我想你会的),看看。在这里使用Neo4j的好处是,您可以轻松地将您的建议与地理位置关联起来,而无需进行多个数据库连接所需的任何额外计算开销。其他关系存储和文档存储选项也可能是存储地理位置的答案,但是您必须在考虑到您的限制的情况下进行更多的研究

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


    你很早就花时间尝试正确的“模式”,这很好!最终会有回报的

    你好,谢谢你的回答。我有几个问题。首先,您建议对订单使用SQL db。订单是系统的关键部分,如果数据库崩溃,我不想让它丢失。NoSql数据库是否有可能丢失数据?此外,交易是好的,但订单彼此不相关,这意味着我想将它们推入数据库而不使用任何锁,店主会频繁地扫描它们,因此我希望数据库能够满足这一需求。另一个问题是关于数据库完整性-您知道任何保持一致性的工具吗。再次感谢您的回复,因为我在这个NoSql世界中迷失了方向