有没有使用NoSQL数据库的电子商务网站?

我最近读了很多'NoSQL'数据库,比如CouchDB,MongoDB等。我看到的大多数网站都是基于文本的网站,比如纽约时报和Source forge。

我想知道你是否可以将这个应用到付款是一个巨大的问题的网站。 我正在考虑以下问题:

  • 你如何保护数据
  • 这些系统是否提供简单的备份/恢复机制?
  • 如何处理事务提交/回滚

我读过以下几篇文章,涵盖了一些方面:

  • 我可以在CouchDB中进行交易和locking吗?
  • 基于文档的数据库与关系数据库的优点/缺点

在这些职位的交易方面,如果涵盖。 但是,安全和备份的问题不包括在内。 有人可以谈一谈这个问题?

如果可能的话,有没有人知道一些电子商务网站已经成功实施了基于文件的数据库。

编辑:2013年3月

我最初发布了一篇关于我在MongoDB和电子商务上撰写的文章的链接,但我不再同意我在那里提出的所有观点。 我仍然相信MongoDB的文档数据模型对于电子商务网站的目录pipe理方面或者对于购物车来说可以很好地工作。 但是很明显,事务是重要的,MongoDB不会给你这些东西。 这个问题的答案是次数最多的选票,值得考虑很多。

这是对那些感兴趣的原始文章:

http://kylebanker.com/blog/2010/04/30/mongodb-and-ecommerce/(archive.org链接);

使RDBMS非常缓慢的开销是保证primefaces性,一致性,隔离性,耐用性,也被称为ACID 。 其中一些属性对于处理金钱的应用程序非常重要。 灯光熄灭时,您不想失去单笔订单。

NoSQL数据库通常会牺牲部分或全部的ACID属性,从而大大降低开销。 对于许多应用程序来说,这是很好的 – 如果在灯光熄灭时几个“digg”丢失了,那没什么大不了的。

对于电子商务网站,你需要问自己你真正需要什么。

  1. 你真的需要一个RDBMS无法提供的性能水平吗?
  2. 你需要RDBMS提供的可靠性吗?

老实说,#2的答案可能是“是的”,这就排除了大多数NoSQL解决scheme。 除非你处理的stream量水平可与amazon.com相媲美,否则RDBM甚至在适中的硬件上都可能会满足你的性能需求,尤其是如果你限制自己进行简单的查询和正确的索引。 这使得答案#1“否”。

但是,您可以考虑使用RDBMS来处理事务数据,并使用NoSQL数据库处理非关键数据,例如产品页面,用户评论等。但是,您将拥有两倍的数据存储软件来安装,两个数据存储区中的数据必须在代码中进行pipe理,否则不会将您的NoSQL数据库与您的RDBMS连接起来。 这可能会导致不必要的复杂程度。

最后,如果一个关系数据库pipe理系统(RDBMS)提供的function必须具有可靠性,而且它对于你将要遇到的各种负载的性能是可以接受的,那么关系数据库pipe理系统可能是最好的select。

处理财务信息是SQL真正适合工作的领域之一。 大多数NOSQL系统的devise旨在通过接受更高的数据丢失或不一致风险来提高可扩展性。 他们也倾向于在所有logging上运行报告的能力有限,因为在一个典型的大型网站上,您只需要在索引中find足够的数据来查找和显示一条logging,其余部分可能完全无法访问,直到您知道所查找的logging对于。

在处理资金时,任何数据不一致都是一个大问题,如果您需要更多的可伸缩性,而不是单个sql服务器可以给您的资源,那么您就有足够的资金来承担更高的sql成本。 另外,如果您不使用sql,那么您可能会错过从sql获得的即席报告 – 几乎所有您想要的关于销售历史的信息都是从sql获取的,但是可能需要基于对象的复杂自定义代码商店。

我不认为NoSQL数据库的安全性与关系数据库的安全性不同。 最后,安全性是数据如何实际存储的一个正交问题。 此外,从联网的angular度来看,您不会允许从任何地方访问数据库,而只能访问您的业务层服务器。

至于备份,我知道的大多数NoSQL数据库都可以进行热备份,就像常规数据库一样。

IMO真正的问题是,你是否可以忍受NoSQL数据库对你的限制 – 特别是普遍缺乏即席查询。 例如,如果您想要知道所有曾经购买过产品“X”的人,那么您必须从第一天开始为您的数据访问层build立一个计数器(或者对每个过去进行非常昂贵的串行查询交易)。 在一个常规的SQL数据库中,你可以添加一个索引并做一个查询,你就完成了(或者甚至,如果是一次性的,不要添加索引)。 或者,也许你想在最新的版本出来之前找出所有购买产品“Y”的人(所以你可以给他们一个提醒升级或者其他的东西):再次,你必须提前计划一个NoSQL数据库,但是关系数据库是微不足道的。

我认为,当您可以提前计划架构和使用模式时,以及偶尔重新扫描logging以添加新的字段或度量标准是可以接受的。 但是对于一个电子商务网站,我认为即席查询太有价值了。 当然,这只是我的意见,当然,没有理由不能在两个数据库之间混合使用应用程序的某些部分。 我个人select一个关系数据库与之间的memcached中,以增加性能,但…

你们应该检查一下:

通过getlasterror进行复制确认

MongoDB正处于提供持久写入的边缘。 我认为这是人们讨论这个话题的主要问题。 由于嵌套的文档function,交易部分不那么重要。

Gilt.com使用Voldemort在巨大的负载下处理篮子/库存。 查看来自伦敦QCon 2010的演讲详情 – http://www.infoq.com/presentations/Project-Voldemort-at-Gilt-Groupe

我还要重申一个事实,即“NoSQL”并不意味着“没有SQL”,而是“不只是SQL”,而不是看任何技术来完成一个完整的rip /replace任何其他的你应该看最好的工作的工具。 NoSQL数据存储没有很好的数据仓库,可能不适合存储用户事务,但是它们在某些特定领域非常好 – 请参阅上面的Gilt Groupe示例。

另一个突出的例子是英国广播公司的网页 – 不是交易,但有趣的。 他们使用CouchDB来存储用户的偏好。 不幸的是,他们似乎已经坠毁在负载下。

[更新:我也可以确认,ASOS市场使用一些NoSQL组件 – http://bagcheck.com/bag/9206-asos-marketplace-technology ]

下面是一些使用MongoDB的商业Web应用程序,它是比较stream行的NoSQL数据库之一。

http://www.mongodb.org/display/DOCS/Production+Deployments

这不完全是电子商务网站本身,但很多都是企业所依赖的NoSQL驱动的方面。 我可以确认ChatPast完全在MongoDB上完成。 我们做电子商务,但是由于安全/处理的考虑,它被卸载到Chargify ,而不是害怕在MongoDB上做商业。

是的, http://myestoreapp.com使用MongoDB的一切。; 一探究竟; 随时可以拍摄任何问题。