возможно ли одновременный доступ к базе данных или файлу памяти из нескольких процессов? - PullRequest
0 голосов
/ 20 ноября 2010

Вот моя ситуация. У меня есть серверное приложение, предназначенное для использования несколькими пользователями, поэтому одновременно выполняется много операций чтения / записи. И ответы должны быть БЫСТРЫМИ.

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 22 ноября 2010

Решение с MongoDB - это шард. MongoDB sharding в основном позволяет использовать больше процессоров для решения проблемы.Больше процессоров = больше пишущих потоков.

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

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

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

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

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