Подтвердить что ты не робот

База данных для Python Twisted

Есть API для Twisted приложений, которые могут масштабироваться в зависимости от базы данных: twisted.enterprise.dbapi

Сбивая с толку, какая база данных выбрать?

В базе данных будет приложение Twisted, которое в основном делает вставки и обновления и относительно немного выбирает, а затем другие клиенты строгого доступа, которые обращаются к базе данных, непосредственно делая выбор.

(Пользователи только для чтения не обязательно выбирают данные, которые вставляется Twisted-приложение, а не как база данных используется как очередь сообщений)

Мое понимание - , которое я хотел бы скорректировать/советовал - это то, что:

  • Postgres - отличная БД, но почти все привязки Python - и есть запутанный лабиринт из них - являются отказом
  • Существует psycopg2 для postgres, но это создает большой шум в отношении создания собственного пула соединений и вещей; это сосуществование изящно/полезно/прозрачно с объединением пула соединений Twisted async и т.д.
  • SQLLite - отличная база данных для небольших вещей, но если она используется многопользовательским способом, она блокирует целую базу данных, поэтому производительность будет соответствовать шаблону использования, который я предполагаю; он также имеет разные механизмы для ввода значений столбцов?
  • MySQL - после поглощения Oracle, кто захочет принять его сейчас или принять вилку?
  • Есть ли что-нибудь еще?
4b9b3361

Ответ 1

Масштабируемость

twisted.enterprise.adbapi не обязательно является интерфейсом для разговора с базами данных масштабируемым способом. Масштабируемость - это проблема, которую вы решаете отдельно. Единственное, что действительно требует twisted.enterprise.adbapi - это позволить вам использовать модули DB-API 2.0 без соответствующей блокировки.

Postgres

Да. Это правильный ответ. Я не думаю, что все привязки Python являются отказом - например, psycopg2, по-видимому, активно поддерживается. Фактически, они просто добавили новые привязки для доступа async, которые Twisted может в конечном итоге предложить интерфейс.

SQLite3 тоже довольно круто. Возможно, вы захотите использовать Postgres или SQLite3 в своем приложении; ваши юнит-тесты, безусловно, будут более счастливыми работать с SQLite3, например, даже если вы хотите развернуть против Postgres.

Другое

Трудно узнать, может ли другая база данных полностью (что-то нереляционное, возможно) лучше всего подходит для вашего приложения, чем Postgres. Это зависит от конкретных данных, которые вы собираетесь хранить, и от запросов, которые нужно выполнить против него. Если в вашей базе данных есть интересные отношения, Postgres действительно выглядит довольно неплохим ответом. Если все ваши запросы выглядят как "SELECT foo, bar FROM baz", возможно, может быть более простая и более высокая производительность.

Ответ 2

Существует библиотека txpostgres, которая заменяет замену на twisted.enterprise.dbapi, вместо пула потоков и блокировки DB IO, она полностью асинхронна, используя встроенные возможности async psycopg2.

Мы используем его в производстве в крупной корпорации и до сих пор хорошо обслуживаем нас. Кроме того, он активно развивается - ошибка, о которой мы сообщали в последнее время, была решена очень быстро.

Ответ 3

Вы можете посмотреть базы данных nosql, такие как mongodb или couchdb с скрученными. Масштабирование может быть проще с базами данных, основанными на nosql, чем с mysql или postgres.