2010-04-26 22 views
16

Có một API cho các ứng dụng Twisted để nói chuyện với một cơ sở dữ liệu một cách mở rộng: twisted.enterprise.dbapiCơ sở dữ liệu cho Python Twisted

Điều khó hiểu là, trong đó cơ sở dữ liệu để chọn?

Cơ sở dữ liệu sẽ có ứng dụng Twisted chủ yếu là chèn và cập nhật và tương đối ít lựa chọn, và sau đó các máy khách chỉ đọc nghiêm ngặt khác đang truy cập cơ sở dữ liệu trực tiếp thực hiện lựa chọn.

(Read-Only người dùng không nhất thiết phải chọn các dữ liệu mà ứng dụng Twisted được chèn; nó không phải là mặc dù cơ sở dữ liệu đang được sử dụng dưới dạng tin nhắn-queue)

hiểu biết của tôi - mà tôi d thích chỉnh/adviced - là:

  • Postgres là một DB lớn, nhưng hầu như tất cả các bindings Python - và có một mê cung khó hiểu của họ - là Abandonware
  • psycopg2 cho postgres, nhưng điều đó làm cho rất nhiều tiếng ồn về làm riêng của mình kết nối tổng hợp và những thứ; điều này có tồn tại một cách duyên dáng/hữu ích/minh bạch với kết nối cơ sở dữ liệu không đồng bộ của Twisted và như vậy không?
  • SQLLite là cơ sở dữ liệu tuyệt vời cho những điều nhỏ nhặt nhưng nếu được sử dụng theo cách đa người dùng, nó sẽ khóa toàn bộ cơ sở dữ liệu, vì vậy hiệu suất sẽ hút trong mẫu sử dụng mà tôi dự tính; nó cũng có các cơ chế khác nhau để nhập các giá trị cột?
  • MySQL - sau khi tiếp quản Oracle, ai muốn chấp nhận nó ngay bây giờ hoặc áp dụng một ngã ba?
  • Có điều gì khác ngoài kia không?
+0

điều gì về Oracle dbs? –

Trả lời

14

Khả năng mở rộng

twisted.enterprise.adbapi không nhất thiết phải là một giao diện cho nói chuyện với cơ sở dữ liệu một cách mở rộng. Khả năng mở rộng là một vấn đề bạn có thể giải quyết một cách riêng biệt. Điều duy nhất twisted.enterprise.adbapi thực sự yêu cầu phải làm là cho phép bạn sử dụng các mô-đun DB-API 2.0 mà không chặn thông thường.

Postgres

Yes. Đây là câu trả lời chính xác. Tôi không nghĩ rằng tất cả của các ràng buộc Python là từ bỏ - psycopg2, ví dụ, dường như được chủ động duy trì. Trong thực tế, họ chỉ cần thêm một số ràng buộc mới cho truy cập async mà Twisted cuối cùng có thể cung cấp một giao diện.

SQLite3 cũng khá thú vị. Bạn có thể muốn làm cho nó có thể sử dụng hoặc Postgres hoặc SQLite3 trong ứng dụng của bạn; kiểm thử đơn vị của bạn chắc chắn sẽ chạy hạnh phúc hơn với SQLite3, ví dụ, ngay cả khi bạn muốn triển khai với Postgres.

Khác?

Thật khó để biết cơ sở dữ liệu khác hoàn toàn (một cái gì đó không quan hệ, có lẽ) sẽ phù hợp với ứng dụng của bạn tốt hơn Postgres. Điều đó phụ thuộc rất nhiều vào dữ liệu cụ thể mà bạn sẽ lưu trữ và các truy vấn bạn cần để chạy với nó. Nếu có những mối quan hệ thú vị trong cơ sở dữ liệu của bạn, Postgres có vẻ như là một câu trả lời khá hay. Nếu tất cả các truy vấn của bạn trông giống như "SELECT foo, bar FROM baz", thì có thể có tùy chọn hiệu suất cao hơn, đơn giản hơn.

+0

con trỏ về việc giải quyết khả năng mở rộng một cách riêng biệt? – Will

+2

Đó là một chủ đề đủ lớn mà nó xứng đáng 15 hoặc 20 câu hỏi chuyên dụng, không phải là một vài câu trong một bình luận. ;) –

+0

"Nếu tất cả các truy vấn của bạn trông giống như" SELECT foo, bar FROM baz ", có thể có tùy chọn hiệu suất đơn giản hơn, cao hơn" -> bạn nghĩ gì khi viết bài này? :) –

9

Có thư viện txpostgres là thư viện thay thế cho twisted.enterprise.dbapi, —trong hồ bơi chuỗi và chặn DB IO, hoàn toàn không đồng bộ, tận dụng khả năng không đồng bộ được tích hợp của psycopg2.

Chúng tôi đang sử dụng nó trong sản xuất trong một tập đoàn lớn và nó đã được phục vụ chúng tôi rất tốt cho đến nay. Ngoài ra, nó đang tích cực phát triển - một lỗi mà chúng tôi báo cáo gần đây đã được giải quyết rất nhanh chóng.

0

Bạn có thể nhìn vào cơ sở dữ liệu NoSQL như MongoDB hoặc couchdb với xoắn. Mở rộng quy mô có thể dễ dàng hơn với cơ sở dữ liệu dựa trên nosql so với mysql hoặc postgres.