NoSQL是否适合销售门票Web应用程序?

时间:2011-01-14 09:31:02

标签: mongodb google-app-engine amazon-ec2 database nosql

我想编写一个高度可扩展的Web应用程序来销售活动门票。我想使用NoSQL数据库,如Big Table或MongoDB和Cloud Service,如Google App Engine(GAE)或Amazon Elastic Compute Cloud(Amazon EC2)

使用这种类型的数据库是否可以确保两个客户端无法同时为同一个地方购买机票?或者可能是我将不得不使用RDBMS数据库并忘记Google App Engine?

4 个答案:

答案 0 :(得分:3)

GAE的数据存储区之类的东西仍然可以支持事务语义,例如:

http://code.google.com/appengine/docs/python/datastore/transactions.html

是的,有可能做你想做的事情。 (注意 - GAE的数据存储区并不完全是NoSQL,因为它使用类似SQL的查询。)

答案 1 :(得分:2)

答案可能是。'

根据您尝试构建的内容,您可以使用本文中的一些技巧: http://kylebanker.com/blog/2010/06/07/mongodb-inventory-transactions/

答案 2 :(得分:2)

我对这个问题有疑问。并非所有NoSQL数据库都是平等创建的,并且不同的NoSQL数据库具有不同的存储数据的方式。通常你应该担心的是:数据实际写入磁盘而不仅仅是内存。大多数NoSQL数据库都可以这样做,但默认情况下不行。我们只是说这不是问题,你通常可以告诉像MOngo或Cassandra这样的数据库将数据写入磁盘,甚至可以告诉数据应该至少写入多少服务器。

问题是您可能无法获得真正的交易支持。当您处理电子商务时,重要的是拥有全部或全部类型的转换,其中几个操作要么完全成功,要么回滚。绝对不可能只保存部分数据。例如,如果您需要将数据写入多个表(NoSQL术语中的集合或文档),如果服务器在流程中间发生故障并且您的数据仅写入一个表,那么这在电子商务中通常是不可接受的。

我不熟悉所有NoSQL数据库,但我所知道的还没有这个选项。 另一方面,MySQL确实如此。

如果事务支持或缺乏它不会打扰你,那么我认为只要你告诉它将数据保存到磁盘而不仅仅是内存中就可以使用NoSQL。

答案 3 :(得分:1)

使用get_or_insert之类的内容,您可以轻松确保两个客户端在Google App Engine上不会同时接收相同的资源。但是,GAE和RDBMS之间存在很大差异,因此请务必在做出决定之前进一步研究它们。