2009-08-24 35 views
9

Tôi đã nhìn thấy một vài câu hỏi hiệu suất SQLite đây trên Stackoverflow, nhưng trọng tâm là trên các trang web, và tôi đang xem xét sử dụng DB này trong một kịch bản client-server:SQLite cho client-server

  • Tôi mong đợi 1-10 khách hàng cho một máy chủ cho bây giờ, có thể lên tới 50 hoặc nhiều hơn trong tương lai.
  • nhẹ hơn lần đọc hơn viết
  • DB sẽ ngồi đằng sau một quá trình máy chủ (ví dụ: không sử dụng truy cập DB trực tiếp thông qua một mạng lưới)

Would sử dụng SQLite làm cho ứng dụng kém nhạy như trái ngược với sử dụng PostgreSQL ? Trực giác của tôi nói với tôi rằng nó sẽ là ok cho những tải trọng, nhưng có lẽ ai đó có một số kinh nghiệm thực tế với loại kịch bản.

+2

Vì trang web * là * ứng dụng máy khách-máy chủ Tôi không hiểu tại sao điều này lại khác. Bạn nghĩ gì khác biệt? Tại sao bạn nói một ứng dụng máy chủ ứng dụng khách về cơ bản không giống như một ứng dụng máy chủ web? –

+0

Về cơ bản nó là như nhau, nhưng câu hỏi khả năng mở rộng SQLite là một truy cập rep Stackoverflow, vì vậy tôi sẽ tưởng tượng rằng nó có các mẫu truy cập hoàn toàn khác nhau. Một sự khác biệt quan trọng là tôi có thể kiểm soát chặt chẽ tất cả các ngăn xếp công nghệ, trong khi với một trình duyệt một số lựa chọn được xác định trước cho bạn. – rpg

+1

@rpg: Có, khi bạn có thiết lập c/s của riêng bạn, bạn có quyền kiểm soát nhiều hơn toàn bộ như trong thiết lập trang web. Điều này trong quan điểm của tôi nói cho SQLite - khi nó có khả năng mở rộng trong một thiết lập trang web, tại sao nó không phải là trong thiết lập của bạn, nơi bạn có quyền kiểm soát nhiều hơn? Hơn nữa các mẫu truy cập có thể là một vấn đề, tất nhiên. Nhiều Writes (xen kẽ với lần đọc) đặt căng thẳng hơn trên một công cụ DB như một thiết lập chỉ đọc thuần túy. Chắc chắn rồi! Tôi sẽ nói nó phụ thuộc vào lượng dữ liệu bạn thường thay đổi trong một chuyến đi khứ hồi (số hàng, cột và bảng ...). Bạn có thể đặt những người viết vào một giao dịch ... và như vậy trên – Juergen

Trả lời

13

Tôi đã sử dụng SQLite cho một sản phẩm máy khách/máy chủ chính được sử dụng với ~ 10 người dùng đồng thời và tôi hối tiếc sâu sắc rằng quyết định. Theo tôi - PostgreSQL là phù hợp hơn cho các kịch bản máy khách/máy chủ hơn SQLite do độ chi tiết khóa tốt của nó.

Bạn chỉ đơn giản là không thể có được rất xa khi toàn bộ cơ sở dữ liệu bị khóa bất cứ khi nào ai đó cần phải viết một cái gì đó ..

Tôi thích SQLite rất nhiều (tôi thậm chí đã viết một tiện ích thương mại để so sánh cơ sở dữ liệu SQLite - SQLite Compare nhưng tôi không nghĩ rằng nó phù hợp với hóa đơn khi bạn có kịch bản máy khách/máy chủ.

Thậm chí tác giả của SQLite says nên sử dụng nó thay thế cho định dạng tệp tùy chỉnh chứ không phải là máy chủ cơ sở dữ liệu đầy đủ. lời khuyên nghiêm túc hơn ..

+0

Theo tôi, bạn chỉ có thể gặp rắc rối với độ chi tiết khóa tốt khi bạn có nhiều quy trình máy chủ truy cập vào một tệp DB hoặc khách hàng của bạn truy cập trực tiếp vào DB. Khi bạn có một quá trình máy chủ - làm thế nào bạn có thể nhận được vấn đề khóa (Ok, tôi phải thêm, mà bạn không sử dụng chủ đề ...)? – Juergen

+1

Thực ra - tôi có một máy chủ duy nhất truy cập cơ sở dữ liệu trong tên của nhiều quy trình khách hàng. Vậy cái gì? Trong trường hợp của tôi - mỗi khách hàng được đại diện bởi một chuỗi công nhân trong máy chủ và khi bạn có nhiều khách hàng làm việc trên máy chủ, bạn cũng sẽ có nhiều luồng đang làm việc trên cơ sở dữ liệu đồng thời. Vì rất khó dự đoán trước cách truy cập cơ sở dữ liệu thực sự được thực hiện (ví dụ: đọc và viết mẫu truy cập) Tôi khuyên bạn không nên đưa ra quyết định hạn chế như vậy (sử dụng SQLite thay vì PostgreSQL) ngay từ đầu. –

+1

Có một ngôi nhà mới cho tiện ích So sánh SQLite của bạn không? – Flimzy

3

Bạn không đề cập đến phiên bản hệ điều hành và Postgres nào bạn đang sử dụng. Tuy nhiên, trước khi cân nhắc việc thay đổi cơ sở dữ liệu, hãy thử thực hiện một số ghi nhật ký và đo điểm chuẩn cho cơ sở dữ liệu hiện tại của bạn với cách sử dụng thông thường, sau đó tối ưu hóa các câu hỏi "nặng nhất". Và có lẽ tải xử lý phụ trợ của bạn làm cho thời gian câu hỏi DB không có liên quan? Như SQLite là một tập tin dựa trên DBMS, truy cập đồng thời từ nhiều quy trình sẽ làm suy giảm hiệu suất khi số khách hàng lớn lên (sửa sau khi bình luận)

câu dưới đây có thể hữu ích: How Scalable is SQLite?

+0

Hiệu suất degredation sẽ chỉ xảy ra với truy cập đồng thời trực tiếp - nhưng như OP cho biết, truy cập là gián tiếp với một quá trình máy chủ inbetween ... điều này có thể cung cấp cho một chút chậm lại, nhưng không có sự thoái hóa. – Juergen

+1

Phải, tôi đã bỏ lỡ một máy chủ cho mỗi phần nhiều khách hàng. Dù sao, nếu xây dựng DB rất đơn giản, nó có thể được di chuyển sang SQLite (không có xử lý bên DB, trình kích hoạt và công cụ), tôi không nghĩ rằng hiệu suất DBMS có thể là vấn đề nghiêm trọng khi DB được lập chỉ mục hợp lý. – tomash

+0

Chưa viết bất kỳ mã nào. Tôi đang làm việc trên danh sách rủi ro của dự án, và khả năng mở rộng là một trong số đó. Không sử dụng bất kỳ Postgres nào, nhưng các hệ điều hành sẽ rất có thể là XP, Vista lúc đầu, sau này là Linux. – rpg

1

tôi sẽ xác nhận với S. Câu trả lời của Lott.

Tôi không biết SQLite hoạt động như thế nào so với PostgreSQL, vì tôi không biết bất kỳ meassurements mới hơn, nhưng kinh nghiệm của riêng tôi với SQLite trong một môi trường khá giống nhau là khá tốt.

Điều duy nhất có thể gây ra khó khăn trong quan điểm của tôi là bạn có khá nhiều bài viết. Nhưng tất cả phụ thuộc vào tổng số mỗi giây tôi sẽ nói.

Ngoài ra, cài đặt của bạn để có một quy trình máy chủ tối ưu cho SQLite theo ý kiến ​​của tôi - vì vậy bạn phá vỡ điểm yếu của nó trong đa tác vụ.