Kích thước tối đa trong thế giới thực, thực tế cho cơ sở dữ liệu SQLite là gì?


33

Theo bài viết này về Sử dụng phù hợp cho SQLite, nó nói rằng, trong khi SQLite bị giới hạn ở mức 140 terabyte , RDBMS của máy khách / máy chủ có thể hoạt động tốt hơn:

Một cơ sở dữ liệu SQLite có kích thước giới hạn là 140 terabyte (2 47 byte, 128 tibibytes). Và ngay cả khi nó có thể xử lý các cơ sở dữ liệu lớn hơn, SQLite lưu trữ toàn bộ cơ sở dữ liệu trong một tệp đĩa duy nhất và nhiều hệ thống tệp giới hạn kích thước tối đa của tệp ở mức thấp hơn mức này. Vì vậy, nếu bạn đang dự tính các cơ sở dữ liệu có độ lớn này, bạn sẽ cân nhắc tốt việc sử dụng một công cụ cơ sở dữ liệu máy khách / máy chủ để truyền bá nội dung của nó trên nhiều tệp đĩa và có thể trên nhiều ổ đĩa.

Nói chung, tôi đồng ý với điều này, nhưng tôi đã rất ngạc nhiên khi biết rằng giới hạn tối đa của SQLite là rất cao! Theo kinh nghiệm của tôi, tôi đã sử dụng khá nhiều cơ sở dữ liệu SQL Server với kích thước ~ 30-100GB. Tôi cũng đã làm việc gián tiếp với các cơ sở dữ liệu lớn hơn nhiều bằng cách sử dụng Oracle, Postgres hoặc Cassandra. Trong số đó, ít nhất là theo hiểu biết của tôi, không ai đạt tới mức 140TB. Tôi không phải là một DBA, vì vậy đây là những gì tôi sẽ coi là "lớn" từ kinh nghiệm trực tiếp của mình.

Tôi chỉ xem xét SQLite cho các tình huống trong đó cơ sở dữ liệu sẽ rất nhỏ; hàng chục megabyte nhiều nhất

Sau khi đọc bài viết này, tôi vẫn không bị thuyết phục khi xem xét SQLite cho bất cứ điều gì có thể cần hàng trăm gigabyte. Nhưng tôi tự hỏi nếu tôi đã đánh giá thấp khả năng của nó. Giới hạn kích thước tối đa thực tế cho cơ sở dữ liệu SQLite trong sử dụng trong thế giới thực là gì?


3
Tôi chỉ nghĩ rằng chúng ta thường phải xem xét số lượng kết nối đồng thời vì các bộ dữ liệu lớn thường được sử dụng để sử dụng cho nhiều người dùng. Có cách nào để bạn kiểm tra điều này trên hệ thống của chính bạn không?
JeffO

3
Đối với một cái gì đó giống như cơ sở dữ liệu của các giao dịch được lưu trữ mà gần như không cần phải truy cập, SQLite có thể là một lựa chọn tuyệt vời và mỗi lần chỉ có một người dùng (nếu có) và bạn không cần phải có toàn bộ Thiết lập máy chủ DB để hỗ trợ nó. Mặt khác, nếu bạn có nhiều người dùng đồng thời, mặt khác, bạn có thể dễ dàng gặp phải các vấn đề với việc khóa trong quá trình lâu trước khi bạn nhận được ngay cả cơ sở dữ liệu nhiều gig.
Michael Kohne


2
@Pacerier - phải, để cài đặt phần mềm. Sau đó, bạn phải gán vai trò DB, tìm ra cách tích hợp vào hệ thống sao lưu của mình, đảm bảo rằng hệ thống sao lưu đặt máy chủ DB ở trạng thái thích hợp khi bắt đầu và kết thúc sao lưu, v.v. thiết lập một máy chủ db thay vì chỉ cài đặt phần mềm. Hơn nữa, đó là một dịch vụ nữa mà bạn phải lo lắng từ quan điểm bảo mật mạng và một điều nữa là bạn phải theo kịp với việc vá lỗi. Nếu bạn CẦN một dịch vụ db, bằng mọi cách, hãy sử dụng nó, nhưng bạn không cần nó, SQLite có rất ít chi phí.
Michael Kohne

1
@ leeand00 - Hoặc bạn có thể thuê mặt bằng trong một tháng.
JeffO

Câu trả lời:


26

Giới hạn thực tế (về kích thước của một số cơ sở dữ liệu Sqlite) giống như giới hạn thực tế cho một tệp dữ liệu. Và giới hạn đó phụ thuộc rất nhiều vào máy tính & hệ thống của bạn. Trên máy tính để bàn Linux hiện tại của tôi, tôi không thể đủ khả năng lớn hơn nhiều tệp 350Gbyte (vì theo nguyên tắc thông thường, tôi tránh để một tệp duy nhất ăn nhiều hơn một nửa phân vùng đĩa). BTW, giới hạn thực tế đó cũng tác động đến các RDBMS SQL khác như PostGreSQL hoặc MariaDB (nhưng hầu hết trong số này đang lưu giữ dữ liệu trong một số tệp mà bạn có thể giữ trên các hệ thống tệp khác nhau và một số trong số chúng có thể quản lý dữ liệu phân tán trên các máy từ xa .. .)

Sau khi đọc bài viết này, tôi vẫn không bị thuyết phục khi xem xét SQLite cho bất cứ điều gì có thể cần hàng trăm gigabyte

Bạn đúng và sai.

Bạn đã đúng, bởi vì trên máy tính ngày nay (máy tính xách tay & máy tính để bàn, không phải siêu máy tính hoặc máy chủ trung tâm dữ liệu), một trăm gigabyte vẫn là một không gian đĩa khá lớn. Vì vậy, trong thực tế, nếu bạn nghĩ về một cơ sở dữ liệu lớn như vậy, bạn sẽ tưởng tượng tốt hơn một máy chủ SQL thực sự (đặc biệt là PostGreQuery) vì bạn có thể muốn truy cập từ xa, truy cập đồng thời hiệu quả và có thể phân phối dữ liệu & bảng.

Bạn (về nguyên tắc, tôi chưa bao giờ thử) sai vì rất có thể SQLite có khả năng (và đôi khi được kiểm tra) để xử lý cơ sở dữ liệu vài trăm gigabyte, giả sử bạn có một hệ thống tệp có khả năng xử lý một tệp lớn như vậy (và có lẽ là hai ít nhất là họ).

Tôi chắc chắn sẽ (đôi khi) xem xét SQLite cho cơ sở dữ liệu của vài chục gigabyte (và tôi đã thử một lần với một .sqlitetệp lớn như vậy , IIRC là 40Gbyte). Trên các máy hiện tại (không phải siêu máy tính), tôi sẽ ngần ngại khi có hàng trăm gigabyte cơ sở dữ liệu SQLite, đơn giản vì một tệp như vậy khá lớn theo thực tế ngày nay.

IIRC một số nhà cung cấp phần cứng bán các máy hệ thống tập tin chuyên dụng đã nói với tôi một lần về ứng dụng sqlite terabyte (nhưng tôi có thể sai).

Tất nhiên hiệu năng SQLite phụ thuộc (như tất cả các cơ sở dữ liệu SQL) rất nhiều về số lượng và độ rộng của các bảng, chỉ mục của chúng, các truy vấn SQL có liên quan. Và bạn không muốn có quyền truy cập đồng thời (theo nhiều quy trình khác nhau) và bạn nên sử dụng giao dịch (theo kinh nghiệm, ngay cả trên cơ sở dữ liệu SQLITE nhỏ của vài megabyte, bạn thực sự muốn bọc ví dụ hàng ngàn yêu cầu chèn của mình với BEGIN TRANSACTION& END TRANSACTION, không làm điều đó đang làm chậm Sqlite bởi một yếu tố lớn - hơn 10 lần-).

Và theo kinh nghiệm cá nhân, với cấu hình và tổ chức phù hợp, SQLite có thể quản lý cơ sở dữ liệu lớn hơn RAM có sẵn (vì vậy 30Gbyte không phải là vấn đề) - nhưng bạn có thể muốn các chỉ mục phù hợp với RAM!

Nếu bạn tình cờ mã hóa thứ gì đó cho "siêu máy tính" hoặc máy trạm đắt tiền (ví dụ: 512Gbyte RAM và 8Tbyte đĩa và 512Gbyte SSD), bạn chắc chắn có thể có cơ sở dữ liệu Sqlite terabyte. Nhưng bạn sẽ muốn làm điều đó có lẽ chỉ khi một (hoặc rất ít) quá trình truy cập cơ sở dữ liệu đó. Nếu bạn có hàng tá quy trình truy cập đồng thời cùng một cơ sở dữ liệu, tốt hơn là cài đặt RDBMS SQL thực (à la MariaDB hoặc PostGreQuery)

Cũng lưu ý rằng mặc dù định dạng (nhị phân) của .sqlitecác tệp cơ sở dữ liệu được ghi là "di động", tôi thích sao lưu cơ sở dữ liệu ở định dạng văn bản SQL (sử dụng sqlite3 mydb.sqlite .dump > mydb.sql). Sau đó, tôi cũng cần một số không gian đĩa bổ sung cho kết xuất văn bản đó (và điều đó làm giảm giới hạn thực tế).

Thông thường Sqlite không phải là nút cổ chai. Nhưng đĩa có thể.

Tái bút Lý do tương tự có thể được áp dụng cho các tệp được lập chỉ mục lớn bằng GDBM .

PPS. Trong nhánh expjs của tôi ( sept.2016 ) của trình giám sát MELT của tôi (phần mềm miễn phí GPLv3, trên github) Tôi đang duy trì toàn bộ đống ứng dụng trong JSON trong cơ sở dữ liệu Sqlite mới. Tôi đã chạy các thí nghiệm nhỏ với hàng triệu đối tượng (khá "lớn") mà không có bất ngờ xấu. YMMV.


7
Bạn có thể đã dừng viết sau đoạn thứ tư. Nhưng dù sao +1.
Robert Harvey

3
Có thể, nhưng tôi đã rất ngạc nhiên khi nhận thấy rằng ngay cả trên cơ sở dữ liệu sqlite mới chỉ có vài megabyte, các giao dịch rất quan trọng trong thực tế (chỉ với một quá trình duy nhất truy cập, thực sự bằng văn bản, tệp mới đó).
Basile Starynkevitch

3
Điều đó chắc chắn đúng cho việc viết. Trong thực tế, thật khó để tưởng tượng một cơ sở dữ liệu SQLite với kích thước như OP mô tả. Postgresql có lẽ sẽ là một lựa chọn tốt hơn, không phải vì khả năng kích thước của nó, mà là sự tương tranh sức mạnh công nghiệp mà SQLite không có.
Robert Harvey

5
Có rất nhiều tình huống hợp pháp trong đó bạn có thể có cơ sở dữ liệu SQLite với kích thước tệp lớn. Từ chính các nhà phát triển SQLite: nghĩ về nó ít hơn như là một sự thay thế cho MySql và nhiều hơn là một sự thay thế cho fopen. Viết một số phần mềm cad 3D và sử dụng cơ sở dữ liệu SQLite để lưu trữ dữ liệu về các đối tượng, có thể hoàn toàn hợp lý.
whatsisname

2
@Pacerier: Các tệp phim và các đốm nhị phân tương tự thường không được lưu trữ trong cơ sở dữ liệu. Chúng được lưu trữ trong hệ thống tệp và các liên kết đến chúng được lưu trữ trong cơ sở dữ liệu.
Robert Harvey
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.