是否有任何使用NoSQL数据库的电子商务网站

时间:2010-04-05 23:17:32

标签: mongodb couchdb e-commerce database nosql

我最近读过很多关于'NoSQL'数据库的信息,比如CouchDB,MongoDB等。我见过的大部分网站主要是基于文本的网站,如纽约时报和Source Forge。

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

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

我已阅读以下涵盖某些方面的文章:

在这些帖子中,交易的方面如果涵盖。但是,不包括安全性和备份的问题。有人可以对这个问题有所了解吗?

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

8 个答案:

答案 0 :(得分:68)

编辑:2013年3月

我最初发布了一篇链接到我在MongoDB和电子商务上写的文章,但我不再同意我在那里提出的所有观点。我仍然相信MongoDB的文档数据模型可以很好地用于电子商务站点的目录管理方面,也可以用于购物车。但显然交易很重要,MongoDB不会给你这些。下一个最高票数的这个问题的答案让很多值得考虑。

以下是感兴趣的人的原始文章:

  

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

答案 1 :(得分:54)

使RDBMS如此缓慢的开销保证了原子性,一致性,隔离性,持久性,也称为ACID。其中一些属性对于处理金钱的应用程序非常关键。当灯熄灭时,你不想丢失一个订单。

NoSQL数据库通常会牺牲部分或全部ACID属性,以换取严重降低的开销。对于许多应用来说,这很好 - 如果灯灭了就会丢失一些“挖掘”,这没什么大不了的。

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

  1. 您真的需要一个RDBMS无法提供的性能水平吗?
  2. 您是否需要RDBMS提供的可靠性?
  3. 老实说,#2的答案可能是“肯定”,这排除了大多数NoSQL解决方案。除非你处理与amazon.com相当的流量水平,否则RDBM即使在适度的硬件上也可能很好地满足你的性能需求,特别是如果你将自己局限于简单的查询,并正确索引。这使得答案#1“不”。

    但是,可以考虑将RDBMS用于事务数据,将NoSQL数据库用于非关键数据,例如产品页面,用户评论等。但是,您有两倍的时间要安装的数据存储软件,两个数据存储中的数据之间的任何关系都必须在代码中进行管理 - 没有针对您的RDBMS加入NoSQL数据库。这可能会导致不必要的复杂程度。

    最后,如果RDBMS提供了可靠性所必需的功能,并且它对您将遇到的各种负载的性能可以接受,那么RDBMS可能是最好的选择。

答案 2 :(得分:18)

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

在处理资金时,任何数据不一致都是一个大问题,如果你需要比单个sql server更多的可扩展性,你就可以获得足够的资金来支付更高的扩展成本。此外,如果你不使用sql,你可以从sql中获得的临时报告 - 几乎所有关于销售历史记录的信息都很容易从sql获取,但可能需要来自基于对象的复杂自定义代码存储。

答案 3 :(得分:8)

我认为NoSQL数据库的安全性与关系数据库的安全性不同。最后,安全性是数据实际存储方式的正交问题。此外,从网络角度来看,除了您的业务层服务器之外,您不允许访问任何数据库。

至于备份,我知道的大多数NoSQL数据库允许热备份,就像常规数据库一样。

真正的问题,IMO,你是否能忍受NoSQL数据库对你的限制 - 特别是普遍缺乏临时查询。例如,如果您曾想知道所有购买过产品“X”的人,那么您必须从第一天开始在您的数据访问层中构建一个计数器(或运行非常昂贵的每个过去事务的串行查找)。在常规SQL数据库中,您只需添加索引并执行查询就可以完成(甚至,如果是一次性的话,也不要添加索引)。或许你想找出所有在最新版本发布之前购买产品“Y”的人(所以你可以向他们发送升级或其他的提醒):再次,你必须用NoSQL数据库计划,但是这对于关系数据库来说是微不足道的。

我认为,当您可以提前规划架构和使用模式,以及偶尔重新扫描记录以添加一些新字段或指标时,这是有道理的。但对于一个电子商务网站,我认为即席查询是一个非常有价值的功能。当然,这只是我的意见,并且肯定没有理由不能在两个数据库之间混合使用应用程序的部分内容。我个人亲自选择一个带有memcached的关系数据库,以增加性能,但是......

答案 4 :(得分:6)

你们应该看看这个:

Replication Acknowledgement via getlasterror

MongoDB即将提供持久写入。我认为这是人们讨论这个话题的主要问题w.r.t.钱。由于嵌套的文档功能,事务部分不太重要。

答案 5 :(得分:5)

Gilt.com使用Voldemort在巨大负载下处理篮子/库存。请参阅伦敦QCon 2010上的详细介绍 - http://www.infoq.com/presentations/Project-Voldemort-at-Gilt-Groupe

我还要重申一个事实,“NoSQL”并不意味着“没有SQL”,而是“不仅仅是SQL”,并且不应该考虑任何技术来完成任何其他技术的完整翻录/替换,而应该是在这个工作的最佳工具。 NoSQL数据存储不能创建非常好的数据仓库,并且可能不适合存储用户事务,但它们在某些特定领域非常好 - 请参阅上面的Gilt Groupe示例。

另一个突出的例子是BBC主页 - 不是交易性的,但仍然很有趣。他们使用CouchDB来存储用户首选项。不幸的是,它们似乎在负载下崩溃了。

[更新:我还可以确认ASOS Marketplace使用了一些NoSQL组件 - http://bagcheck.com/bag/9206-asos-marketplace-technology]

答案 6 :(得分:2)

以下是一组使用MongoDB的商业Web应用程序,这是一个比较流行的NoSQL数据库。

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

这本身并不完全是电子商务网站,但许多都是企业所依赖的NoSQL支持的方面。我可以确认ChatPast完全在MongoDB上完成。我们进行电子商务,但由于安全/处理问题,而不是害怕在MongoDB上进行商务活动,因此将其卸载到Chargify

答案 7 :(得分:1)

是的,http://myestoreapp.com使用MongoDB来处理所有事情。看看这个;随时可以拍摄任何问题。