电子商务的 NoSQL 数据库

14

我将建立一个电子商务网站,并希望使用一种NoSQL数据库,这将与应用程序的计划很好地契合。但是,当涉及到哪种数据库适合工作时,我不确定。在比较各种数据库之后,最适合的可能是mongo,couch或甚至orientdb。我已经看到了关于它们是否应该与MySQL等内容一起使用的争论。但在这些NoSQL数据库之间,哪一个能够很好地适应电子商务解决方案呢?

请注意,对于用例,我不会每秒进行数千个交易。或类似的高写入速率。它们将是适度的,但达到任何成熟的数据库都可以处理的水平。

CouchDB:具有主到主复制功能,这是我真正需要的。如果没有,我仍然必须在代码中实现相同的功能。我需要能够拥有用户数据库并与母舰同步。(用户将拥有自己的本地主机数据库,可以与主域服务器同步)。Couch也很快,一旦您的查询被存储在数据库中。尽管并不多,但我可能需要更高的读取性能。

MongoDB:查询非常简单且用户友好。此外,考虑到最终用户可能需要在给定时间查询某些事情,而我可能无法提前考虑到这一点,这似乎可能更合适。我不必预先在数据库中存储我的查询。支持原子事务,但一次仅写入单个文档时。

OrientDB:一种图形数据库。与大多数人所熟悉的方式非常不同,但根据需求,它也可能非常适合。Orient具有无模式化的好处,以及对ACID事务的支持。图形数据库可以非常适合许多客户和产品关系。Orient还支持类似于couchdb的主到主复制。

别误会,我知道如何传统方式建立这个东西,例如使用MySQL,但nosql解决方案的便捷性和简洁性非常有吸引力。虽然在我的情况下,需要一个无模式解决方案,在nosql中比mysql要容易得多。因为一个给定的产品可能具有比另一个更多或更少的商品,并且避免每次添加新字段时重新创建表格是可取的。

所以在这3种方案(或者你认为可能更好的其他方案)之间,每种方案的哪些特点对我处理客户交易时的电子商务网站可能有利或不利呢?

编辑:我之所以不使用现有的解决方案,是因为没有现成的解决方案可以满足我所需的集成功能。我们还计划将其作为我们公司的完整产品来使用。除了销售外,还将进行少量其他集成。它还将与商店的POS系统一起工作。


去看看SQL+Solr/ElasticSearch。SQL适用于中等查询/写入速率、数据安全和事务安全(谁想让两个数据库节点向两个不同的人出售相同的东西呢?)。而Solr/ElasticSearch则适用于灵活(或无)模式、非常强大的即席查询和快速搜索。你可以每晚将SQL数据库备份到单个文件中。 - Jesvin Jose
@aitchnyu,我不确定你是否很好地证明了使用SQL的必要性。你所说的“两个数据库节点向两个不同的人销售相同的东西”是什么意思? - Sammaye
1
有一个使用MongoDB的开源电子商务平台。请查看:getfwd.com - Maxim Krizhanovsky
我很好奇为什么这个问题被投票下降了。对我来说,这似乎是一个非常可行的问题,我也看到其他人在互联网上问过类似的问题。而且似乎没有太多关于如何为电子商务网站选择nosql数据库的信息。@Darhazer 我现在正在查看getfwd。 - skift
我也不确定你所说的“两个数据库节点将同一物品销售给两个不同的人”是什么意思。使用NoSQL解决方案,我不需要像Solr和Elasticsearch这样的东西,因为我的所有产品数据都在一个记录中,所以查询起来更容易。这减少了使用复杂工具如Solr的复杂性。我以前没有使用过它,但已经研究过了。它可能很容易设置,但这是另一个需要添加的工具,而我并不需要它。如果我选择SQL,那当然可以。不过,我仍会研究Elasticsearch的灵活模式,以涵盖所有基础。 - skift
3个回答

15

由于电子商务(e-commerce)可以包括从购物车到会员和重复订阅等一切内容,因此很难猜测您所预想的要求和复杂性。

在构建电子商务网站时,早期需要考虑的一个问题是是否已经存在既定的电子商务产品或工具包,可以满足您的要求。即使您的用例似乎很简单,像订单、发票、付款、产品和客户关系等流程中有许多微妙之处。还可能将您的应用程序分成目录管理方面(可能更自定义)与计费方面(可能是第三方的,甚至可能通过托管的计费/支付API)。

另一个考虑因素应该是开发电子商务网站的对象:是为了解决您自己的问题,还是为了客户而开发?自定义构建的时间、预算和功能可能难以估计和安排...并且选择技术的小众化可能会使寻找/雇用额外的开发专业知识变得困难。

第三个考虑因素是您用于开发应用程序的语言选择。一些语言将具有更完整/成熟/有文档记录的驱动程序和/或框架抽象化,以用于不同的数据库。

尽管如此,编写电子商务系统似乎对许多开发人员来说是一种必经之路 ;-).

编辑:自2012年发布该答案以来,很多东西已经改变,您应该参考当前的产品信息。例如,MongoDB自MongoDB 3.4(2016年)以来就支持了Decimal128值和MongoDB 3.6(2017年)以来就支持多文档事务


会有会员制,但它将是简单的,不是产品的主要焦点。这将作为主要服务使用,是店内POS和产品目录。是的,市场上有解决方案,但许多都很笨重和繁琐。它们也没有我们需要的其他功能选项。更不用说,我们正在尝试基于创业公司创建这个产品/服务来销售,同时在我们自己的商店中使用它作为我们自己的系统。此外,是的,应用程序的每个组件都将分成多个插件。这样可以实现可移植性。 - skift
这将是我们计划为任何人提供的自己的产品和服务。在此之前,它还将用于朋友拥有的真实店面和相关业务。该产品是我们两个人作为初创公司创建的一个想法。到目前为止,系统将用Python编写,因为最终还需要编写桌面客户端(店内POS)。主:主复制只是我希望让商店在线同步数据的一个功能,如果他们的本地系统出现问题。他们也应该能够在其他地方不在店内时从在线上使用该系统。 - skift
主-主复制(MVCC)-- 什么意思? - capr
@capr 很好的发现!我相信过去的我试图将MVCC与多主复制关联起来,因为MongoDB的原始MMAP存储引擎绝对不是MVCC。然而,在原始答案中,我的提及非常脱离上下文 :blush:。在所有提到的产品中,过去的9年中发生了很多变化,因此我删除了一些过时的参考。WiredTiger是MongoDB自3.2(2015年)以来的默认存储引擎,使用MVCC,但多主复制将是在复制层(在存储之上)实现的功能。 - Stennie

2
在这里查看不同可用NoSql数据库的比较。根据您的需求进行选择。请点击此处

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接