SQLite trên một máy chủ sản xuất? [đóng cửa]


9

Tôi đã biết về SQLite từ lâu và tôi biết rằng nó rất nhanh, nhưng tôi chưa bao giờ thử nó trong một máy chủ sản xuất. Tôi không bao giờ có thể tìm thấy một ước tính chắc chắn về lưu lượng truy cập mà nó có thể xử lý trước khi thất bại.

Có ai có bất kỳ số hoặc một bài viết về điều này?


2
Cảnh báo: Câu hỏi và một số Câu trả lời chứa những hiểu lầm, hiểu lầm và thông tin lỗi thời!
Chris S

Chúng tôi đã đánh giá SQLite như một giải pháp lưu trữ trong sản xuất: uri.agassi.co.il/2014/10/USE-sqlite-for-production.html
Uri Agassi

Câu trả lời:


4

Thật không may, tôi không có bất kỳ số liệu nào cho bạn về khả năng tải, nhưng một vài nhận xét về một số yếu tố hạn chế hiệu suất:

  • Tốc độ của SQLite bị ảnh hưởng bởi tốc độ của đĩa và nó có hay không có nhiều phần chèn / cập nhật đang diễn ra (tức là truy cập ghi). Khóa ghi bị giới hạn bởi tốc độ quay đĩa

  • Giao dịch được bắt đầu theo mặc định, nhưng bạn sẽ có hiệu suất tốt hơn nếu bạn bắt đầu và cam kết giao dịch. Tôi đã chèn rất nhanh khi xử lý giao dịch theo chương trình

  • Nếu bạn thường chỉ đọc dữ liệu thì bạn sẽ có hiệu suất tốt theo kinh nghiệm của tôi. Vì vậy, SQLite có thể được sử dụng như một hệ thống lưu trữ để lưu trữ các máy chủ cơ sở dữ liệu đọc, các từ xa cụ thể hoặc các truy vấn phức tạp.

  • Nó sử dụng ít tài nguyên hơn máy chủ cơ sở dữ liệu, vì vậy điều này có thể ảnh hưởng đến hiệu suất trang web vì giải phóng nhiều tài nguyên hơn cho máy chủ Web và mã ứng dụng

  • Nếu bạn yêu cầu một số lần ghi đồng thời là có thể, thì một máy chủ cơ sở dữ liệu (ví dụ: MySQL, Postgres) có thể phục vụ bạn tốt hơn

Như Devrim đã nêu, trang web SQLite tuyên bố khoảng 100 nghìn người dùng / ngày sẽ ổn. Một hệ thống Trac yêu cầu ghi, vì vậy hiệu suất có thể sẽ chậm hơn trong trường hợp đó


Cảm ơn các respones, vì vậy về cơ bản bạn chỉ có thể ghi vào cơ sở dữ liệu 1 tại một thời điểm? Nhưng bạn vẫn có thể có người đột biến đọc từ cơ sở dữ liệu mà không bị khóa? Nếu vậy, tôi vừa có một vài ý tưởng cho một hệ thống lưu trữ.
Bác sĩ Hydralisk

Số "100K" được ném xung quanh là vô dụng. Các tài liệu đọc "Nói chung, bất kỳ trang web nào có ít hơn 100 nghìn lượt truy cập / ngày sẽ hoạt động tốt với SQLite." Một "hit" thường được định nghĩa là một yêu cầu HTTP. Điều này bao gồm một yêu cầu cho mọi .js, .css và hình ảnh trên một hit. Điều này có liên quan gì đến hiệu suất DB? Giả sử các tác giả có nghĩa là "số lần xem trang", nó vẫn vô dụng. Có bao nhiêu truy vấn trên mỗi lượt xem trang? Tỷ lệ đọc để viết? DB chạy trên loại phần cứng nào? Không nên sử dụng SQLite cho trang web khi có ít nhất một tá công cụ khác tốt hơn cho công việc.
jamieb

@Dr Hydralisk Có, việc đọc có thể xảy ra song song .. giống như một tệp
Cez

@jamieb Quan điểm về "lượt truy cập" là một công bằng. Không ai đã đề cập đến những tài nguyên phần cứng hoặc máy chủ nào có sẵn, vì vậy nó có thể là một máy chủ ảo nhỏ cho tất cả những gì chúng ta biết. Liên quan đến cơ sở dữ liệu SQLite trong một hệ thống bộ đệm, hoặc các bảng chủ yếu chỉ đọc có thể mang lại lợi ích hiệu năng, đặc biệt khi máy chủ cơ sở dữ liệu là một máy chủ từ xa. Bộ nhớ cache + Bộ đệm SQLite của các truy vấn Cơ sở dữ liệu sẽ loại bỏ các truy vấn cơ sở dữ liệu một mình.
Cez

3

Tôi có một số điểm để thêm vào những câu trả lời tốt.

Phiên bản hiện tại của SQLite có WAL (Ghi nhật ký trước) để việc đọc và viết có thể tiến hành đồng thời. Vì vậy, giới hạn nhà văn duy nhất truyền thống được đề cập trong các câu trả lời trước không còn tồn tại. Tôi chưa thấy WAL trong sản xuất nên tôi không thể nhận xét mức độ quy mô của nó.

Sử dụng WAL hay không, nếu cơ sở dữ liệu SQLite của bạn chỉ đọc (hoặc được cập nhật hàng loạt) và nó phù hợp với RAM (HĐH của bạn có đủ RAM dự phòng để giữ bộ đệm), nó có thể mở rộng rất tốt trên ứng dụng web sản xuất. Cá nhân tôi đã rất hoài nghi về hiệu suất, khả năng mở rộng và mạnh mẽ của nó, nhưng bây giờ sau chín tháng sản xuất, nó đã được chứng minh là chạy rất tốt những phần phức tạp nhất của hệ thống .


1

Sqlite là tuyệt vời để nhúng vào các ứng dụng, và đó là những gì nó được thiết kế cho, nhưng nó chắc chắn không phải là "nhanh chóng". Tôi sử dụng nó cho một số ứng dụng của riêng tôi, hoàn toàn vì sự tiện lợi khi chỉ có hai tệp có thể được sao chép sang máy khác để cung cấp cho ứng dụng hoạt động hoàn toàn. Các thử nghiệm chống lại MySQL, sử dụng cùng cấu trúc, chỉ mục, v.v., cho thấy Sqlite chậm hơn đáng kể, ngay cả đối với các cơ sở dữ liệu nhỏ. Tôi hy vọng sự khác biệt hiệu suất sẽ tăng lên khi kích thước cơ sở dữ liệu tăng lên, mặc dù tôi không thể nói chắc chắn vì tôi chỉ sử dụng nó với cơ sở dữ liệu dưới 100 MB.


PRAGMA có thể được điều chỉnh để tăng hiệu suất với chi phí đôi khi làm hỏng cơ sở dữ liệu (mặc dù không mất dữ liệu). Theo kinh nghiệm của tôi, tôi có thể yêu cầu SQLite thực hiện các thao tác chèn với tốc độ khoảng 250-300rps trên máy WindowsXP cũ.
djangofan

-1, vì tôi không đồng ý. Tôi đã xây dựng và truy vấn cơ sở dữ liệu SQLite có kích thước vài GB và tôi sẽ không bao giờ nhận được cùng một lượng truy vấn mỗi giây bằng cách sử dụng MySQL (trong cùng loại phần cứng). SQLite có thể dễ dàng thực hiện các truy vấn ghi 120k mỗi giây nếu bạn biết cách xoa bóp chính xác .
Alix Axel

0

Tôi nghĩ rằng sqlite chỉ nhanh hơn một tệp văn bản / xml (bạn có thể ngạc nhiên nếu bạn đã thử nó). Và nó không hỗ trợ đồng thời, nếu bạn muốn tạo một trang web cho mạng nội bộ nơi mọi người đăng ký giờ làm việc hoặc sử dụng vé trac thì nó có thể phục vụ tốt. Ngoài ra, cần tránh và thay thế bằng mysql hoặc couchdb.

Trang web sqlite cho biết 100k người dùng / ngày sẽ ổn nhưng tôi rất nghi ngờ điều đó, vì một dự án trac đơn giản bị kẹt rất nhiều với việc sử dụng văn phòng 10 ppl.


0

Sqlite không phải là ứng dụng DB máy khách / máy chủ truyền thống. Đó thực chất là một thư viện được nhúng trong một ứng dụng khác. Nó được thiết kế cho các ứng dụng máy tính để bàn một người dùng. Bạn hoàn toàn không muốn thử sử dụng nó như một loại thay thế MySQL / PostgreSQL / MS-SQL độc lập trong môi trường nhiều người dùng vì toàn bộ DB bị khóa khi ghi. Bạn sẽ xử lý các vấn đề tranh chấp ngay cả khi tải nhẹ sẽ phá hủy hiệu suất.


Trong WAL, chỉ có các nhà văn đồng thời bị chặn. Ngoài ra, công cụ MySQL mặc định (MyISAM) cũng khóa các bảng đầy đủ bất cứ khi nào có truy vấn ghi.
Alix Axel

1
@AlixAxel Câu trả lời này được viết sáu tháng trước khi WAL có sẵn.
jamieb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.