Подходит ли NoSQL для продажи билетов веб-приложения? - PullRequest
0 голосов
/ 14 января 2011

Я хочу написать масштабируемое веб-приложение для продажи билетов на мероприятия.Я хочу использовать базу данных NoSQL, такую ​​как Big Table или MongoDB, и облачный сервис, такой как Google App Engine (GAE) или Amazon Elastic Compute Cloud (Amazon EC2)

Возможно ли использование базы данных такого типа, чтобы убедиться, чтоклиент не сможет купить билет на одно и то же место одновременно?Или, может быть, мне придется использовать базу данных RDBMS и забыть о Google App Engine?

Ответы [ 4 ]

3 голосов
/ 14 января 2011

Такие вещи, как хранилище данных GAE, могут поддерживать семантику транзакций, например:

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

Так что да, возможно делать то, что вы хотите сделать. (Примечание: хранилище данных GAE - это не совсем NoSQL, поскольку оно использует SQL-подобные запросы.)

2 голосов
/ 16 января 2011

У меня проблема с этим вопросом. Не все базы данных NoSQL созданы одинаково, и разные базы данных NoSQL по-разному хранят данные. Как правило, вы должны беспокоиться о том, что данные на самом деле записываются на диск, а не только в память. Большинство баз данных NoSQL могут делать это, но не по умолчанию. Скажем так, это не проблема, вы обычно можете указать базе данных, такой как MOngo или Cassandra, записать данные на диск, даже сказать, как минимум на скольких серверах должны быть записаны данные.

Проблема в том, что вы не можете получить истинную поддержку транзакций. Когда вы имеете дело с электронной торговлей, важно иметь переход типа «все или ничего», когда несколько операций либо завершаются успешно, либо откатываются. Не должно быть абсолютно никаких шансов, что только часть ваших данных будет сохранена. Например, если вам нужно записать данные в более чем одну таблицу (сборник или документ на языке NoSQL), если сервер выходит из строя в середине процесса, а ваши данные записываются только в одну таблицу, это обычно недопустимо в электронной торговле.

Я не знаком со всеми базами данных NoSQL, но те, которые я знаю, пока не имеют этой опции. MySQL, с другой стороны, делает.

Если поддержка транзакций или ее отсутствие вас не беспокоит, то я думаю, что можно использовать NoSQL, если вы говорите, что сохраняете данные на диск, а не только в память.

2 голосов
/ 15 января 2011

Ответ «возможно».

В зависимости от того, что вы пытаетесь построить, многие из вас смогут использовать некоторые методы из этого поста: http://kylebanker.com/blog/2010/06/07/mongodb-inventory-transactions/

1 голос
/ 14 января 2011

Используя что-то вроде get_or_insert , вы можете легко убедиться, что два клиента не получают один и тот же ресурс одновременно в Google App Engine.Однако между GAE и RDBMS существуют большие различия, поэтому обязательно изучите их, прежде чем принимать решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...