2010-04-26 19 views
16

Jest API dla Twisted aplikacje do komunikacji z bazą danych w skalowalnym sposób: twisted.enterprise.dbapiDatabase for Python Twisted

Mylące jest to, co baza danych wybrać?

Baza danych będzie zawierała aplikację Twisted, która w większości składa się z insertów i aktualizacji oraz stosunkowo niewielu elementów wybierania, a następnie innych klientów o ścisłym odczycie, którzy uzyskują dostęp do bazy danych bezpośrednio dokonując wyboru.

(read-only użytkownicy niekoniecznie wybierając dane, że Twisted aplikacja jest wstawianie, a jego nie jakby baza danych jest używana jako kolejka komunikatów)

Moje zrozumienie - który I chciałbym skorygować/adviced - jest to, że:

  • Postgres jest doskonałym DB, ale prawie wszystkie wiązania Pythona - i to jest mylące labirynt z nich - są abandonware
  • Istnieje psycopg2 dla PostgreSQL, ale robi to dużo hałasu o robieniu własnego połączenia-łączenia i rzeczy; czy to współistnieje wdzięcznie/użytecznie/transparentnie z połączeniem puli połączeń asynchronicznych bazy danych i takie?
  • SQLLite to świetna baza danych dla małych rzeczy, ale jeśli jest używana w trybie dla wielu użytkowników, to blokuje całą bazę danych, więc wydajność może wessać schemat użycia, który sobie wyobrażam; ma również różne mechanizmy do wpisywania wartości kolumn?
  • MySQL - po przejęciu Oracle, który chciałby go teraz przyjąć lub przyjąć widelec?
  • Czy jest tam coś jeszcze?
+0

co z Oracle dbs? –

Odpowiedz

14

skalowalność

twisted.enterprise.adbapi niekoniecznie jest interfejs do rozmowy z baz danych w skalowalnym sposób. Skalowalność to problem, który możesz rozwiązać osobno. Jedyne, co naprawdę twierdzi, to to, że pozwalasz używać modułów DB-API 2.0 bez blokowania, które normalnie sugeruje.

Postgres

Tak. To jest poprawna odpowiedź. Nie sądzę, aby wszystkie powiązania w Pythonie były porzucone - na przykład psycopg2 jest aktywnie utrzymywany. W rzeczywistości dodali kilka nowych wiązań asynchronicznego dostępu, który Twisted mógłby ostatecznie zaoferować interfejs.

SQLite3 jest całkiem fajny. Możesz chcieć użyć PostgreSQL lub SQLite3 w swojej aplikacji; Twoje testy jednostkowe z pewnością będą bardziej skuteczne w działaniu przeciwko SQLite3, na przykład, nawet jeśli chcesz wdrożyć przeciwko PostgreSQL.

Inne?

Trudno powiedzieć, czy inna baza danych w całości (coś niezwiązanego z relacjami) prawdopodobnie pasowałaby do twojej aplikacji lepiej niż Postgres. To zależy w dużej mierze od konkretnych danych, które zamierzasz przechowywać, oraz od zapytań, które musisz wykonać na jego podstawie. Jeśli w bazie danych są interesujące relacje, Postgres wydaje się całkiem dobrą odpowiedzią. Jeśli wszystkie twoje zapytania wyglądają jak "SELECT foo, bar from FROM", może istnieć prostsza opcja o wyższej wydajności.

+0

wskazówki dotyczące oddzielnego skalowania? – Will

+2

Jest to wystarczająco duży temat, na który zasługuje 15 lub 20 dedykowanych pytań, a nie kilka zdań w komentarzu. ;) –

+0

"Jeśli wszystkie twoje zapytania wyglądają jak" SELECT foo, bar from FROM ", może być prostsza, wyższa opcja wydajności" -> co miałeś na myśli podczas pisania tego? :) –

9

Jest biblioteka txpostgres który to spadek zamiennik dla twisted.enterprise.dbapi, -instead z puli wątków i blokowanie DB IO, jest całkowicie asynchroniczny, wykorzystując wbudowany w asynchronicznych możliwości psycopg2.

Używamy go w produkcji w dużej korporacji i do tej pory dobrze nam służy. Ponadto jest aktywnie rozwijany - zgłoszony przez nas błąd został rozwiązany bardzo szybko.

0

Można spojrzeć na NoSQL baz danych, takich jak MongoDB lub CouchDB z skręcone. Skalowanie może być raczej łatwiejsze z bazami danych nosql niż z mysql lub postgres.