2010-11-20 1 views
0

Вот моя ситуация. У меня есть серверное приложение, предназначенное для использования несколькими пользователями, поэтому есть много операций чтения/записи в одно и то же время. И ответы должны быть FAST.Совместный доступ к базе данных или файлу памяти из нескольких процессов, возможно ли это?

В настоящее время я кэшировал все данные в памяти, поэтому операция чтения и записи данных выполняется так же быстро, как мы ожидали. Чтобы предотвратить блокировку данных, вызывающих у меня проблемы, я использовал Queue для вывода запросов пользователей, чтобы они вошли в процесс обработчика один за другим.

Но вскоре я нашел проблему. Программа может обрабатывать только один запрос за один раз. Даже программный таймер проверки сообщает мне, что он использовал нулевые миллисекунды для обработки, но есть еще ограничения на обработку запросов за одну секунду. Теперь я обрабатывал около 100 раз в секунду.

Так что я ищу несколько методов, более одновременных, как 8 процессов для обработки 8 запросов в ОДНОМ ВРЕМЕНИ. Это будет так приятно. Но проблема с совместным использованием данных больше, я не хочу изобретать колесо. Поэтому я проверил mongodb, redis и sqlite.

вот моя домашняя работа, Поправьте меня, если я был неправ, спасибо большого

MongoDB и Redis действительно быстро, как они утверждали, но они использовали один и тот же механизм, что они могут обрабатывать один запрос один раз, это не то, что Я ищу.

Таким образом, sqlite намного ближе, несколько процессов могут открывать один и тот же файл db в одно и то же время и читать, боль - это его блокировка записи (я не лучше, чем работает новый замок в sqlite3).

Вот мой вопрос, есть ли хорошее решение для этого сценария? Если я разлюблю процесс записи в одном, поможет ли это?

спасибо за любой комментарий

+0

Не все логические процессы разрыва должны быть косвенными, я пытаюсь оптимизировать неосознаваемую часть. – davyzhang

+0

Для sqlite см.: http://www.sqlite.org/faq.html#q5 – tauran

ответ

0

Решение с MongoDB является сегментирование. MongoDB sharding в основном позволяет вам бросать больше процессоров в проблему. Больше процессоров = больше писать потоки.

Каждый экземпляр MongoDB имеет только одну запись. Sharding дает больше примеров и поэтому позволяет больше писать.

Однако проблема здесь больше. Пропускная способность диска.

У меня было Mongo, работающее более 1000 вставок в секунду, если все в ОЗУ. Но большинство людей используют Mongo как базу данных с фактической поддержкой файлов. Поэтому, если вы используете Mongo для действительно тяжелых записей, вы должны быть готовы с дисками, которые могут принять этот уровень пропускной способности.

Опять же, проблема с пропускной способностью диска сворачивается. Создайте больше осколков, и вы получите меньше записей/диск и в основном меньше блокируете все вокруг.

+0

спасибо за исправление меня в решении monongdb. Я буду копать все глубже! Большое спасибо! – davyzhang