Trình soạn thảo Sqlite bằng tiếng Nga. Chương trình SQLiteStudio miễn phí để chỉnh sửa cơ sở dữ liệu SQLite. Tại sao mọi người phàn nàn rằng SQLite chậm?

Cuối cùng tôi quyết định viết một bài về SQLite, trong đó tôi muốn tóm tắt kinh nghiệm 3 năm sử dụng cơ sở dữ liệu này trong Windows của mình. Tôi thấy chủ đề này phổ biến nhưng có rất ít thông tin.

Một chút lời giới thiệu.

Bài viết này không dành cho người mới bắt đầu lập trình.
Nó không phải là một hướng dẫn SQL.
Cô ấy không ủng hộ việc sử dụng SQLite.
Cô ấy không ủng hộ việc không sử dụng SQLite.
Bài viết được viết dưới dạng câu hỏi giả định dành cho người mới sử dụng SQLite và câu trả lời cho chúng (vì có rất nhiều thông tin và ít nhất việc cấu trúc theo cách này sẽ dễ dàng hơn một chút).

SQLite là gì?
SQLite là một cơ sở dữ liệu đa nền tảng được nhúng, hỗ trợ một bộ lệnh SQL khá toàn diện và có sẵn ở dạng mã nguồn (bằng C).

Mã nguồn SQLite thuộc phạm vi công cộng, có nghĩa là không có hạn chế nào về việc sử dụng.

Trang web (có tài liệu xuất sắc bằng tiếng Anh): http://sqlite.org

Phiên bản hiện tại: 3.7.13

Bạn có thể tự biên dịch SQLite, nhưng tôi tải xuống nó đã được biên dịch dưới dạng Windows DLL.

Để lắp ráp của riêng bạn, bạn thường tải xuống cái gọi là. "sự hợp nhất"
những thứ kia. Nguồn SQLite ở dạng một tệp duy nhất trong C + sqlite3.h.

Để giảm kích thước mã SQlite bằng cách loại bỏ những thứ không cần thiết, tất cả các loại DEFINE đều được sử dụng.

SQLite phổ biến đến mức nào?
Tóm lại: cô ấy ở khắp mọi nơi. Ít nhất là trên bất kỳ điện thoại thông minh nào.
Nó đáng tin cậy đến mức nào?
Rất. Khi một phiên bản được phát hành, nó sẽ trải qua một loạt các thử nghiệm tự động nghiêm túc (~ 2 triệu thử nghiệm được thực hiện), mức độ bao phủ mã của các thử nghiệm là 100% (kể từ tháng 8 năm 2009).
Các nhà phát triển cung cấp những công cụ nào khác?
Đã có sẵn tiện ích bảng điều khiển để làm việc với cơ sở dữ liệu (sqlite3.exe, “một shell dòng lệnh để truy cập và sửa đổi cơ sở dữ liệu SQLite”).
Đó là tất cả?
Vâng, tất cả mọi thứ từ các nhà phát triển chính. Tuy nhiên, những người khác viết đủ loại người quản lý, v.v.
Cá nhân tôi chưa bao giờ tìm được cái lý tưởng và sử dụng console.
"Bộ SQL đầy đủ" nghĩa là gì?
Như bạn đã biết, SQL đã đi theo những hướng khác nhau trong quá trình phát triển của nó. Các nhà sản xuất lớn bắt đầu tung ra đủ loại tiện ích mở rộng. Và mặc dù tất cả các loại tiêu chuẩn đều được chấp nhận (SQL 92), nhưng trong đời thực, tất cả các cơ sở dữ liệu lớn đều không hỗ trợ đầy đủ các tiêu chuẩn + chúng có thứ gì đó của riêng mình. Vì vậy, SQLite cố gắng tuân theo nguyên tắc “tập hợp tối thiểu nhưng đầy đủ”. Nó không hỗ trợ những thứ phức tạp nhưng nó khá giống với SQL 92.
Và nó giới thiệu một số tính năng riêng, rất tiện lợi nhưng không đạt tiêu chuẩn.
Điều gì cụ thể về hỗ trợ SQL có thể gây nhầm lẫn?
Bạn không thể xóa hoặc thay đổi một cột trong bảng (ALTER TABLE DROP COLUMN..., ALTER TABLE ALTER COLUMN...).
Có các trình kích hoạt, nhưng không mạnh bằng các RDBMS lớn.
Có hỗ trợ khóa ngoại, nhưng theo mặc định nó bị TẮT.
Không có hỗ trợ tích hợp cho UNICODE (nhưng nhìn chung không khó để đạt được).
Không có thủ tục lưu trữ.
Điều gì tốt hay bất thường?
a) Mỗi ​​bản ghi chứa một cột hàng ảo, bằng một số 64 bit (duy nhất cho bảng).
Bạn có thể khai báo cột của mình INTEGER PRIMARY KEY và sau đó cột này sẽ trở thành rowid (với tên riêng của nó, tên rowid vẫn hoạt động).
Khi chèn một bản ghi, bạn có thể chỉ định một hàng hoặc không thể chỉ định nó (và sau đó hệ thống sẽ chèn một bản ghi duy nhất).
Chi tiết: www.sqlite.org/autoinc.html
b) bạn có thể dễ dàng sắp xếp cơ sở dữ liệu trong bộ nhớ (điều này rất thuận tiện và tôi sẽ cho bạn biết thêm về nó sau);
c) dễ vận chuyển: theo mặc định, cơ sở dữ liệu là một tệp (ở định dạng đa nền tảng);
d) loại cột không xác định loại giá trị được lưu trữ trong trường bản ghi này, nghĩa là bất kỳ giá trị nào cũng có thể được nhập vào bất kỳ cột nào;
e) nhiều hàm dựng sẵn (có thể được sử dụng trong SQL): www.sqlite.org/lang_corefunc.html;
Tôi không hiểu - có chuyện gì với loại này vậy? Tại sao bạn lại cần một loại cột?
Loại cột xác định cách so sánh các giá trị (chúng cần được chuyển đổi thành một loại duy nhất khi so sánh, chẳng hạn như bên trong một chỉ mục).
Nhưng nó không bắt buộc bạn phải nhập các giá trị thuộc loại cụ thể này vào cột. Một cái gì đó giống như gõ yếu.

Giả sử chúng ta đã khai báo một cột là "A INTEGER".
SQlite cho phép bạn nhập các giá trị thuộc bất kỳ loại nào vào cột này (999, "abc", "123", 678.525).
Nếu giá trị được chèn không phải là số nguyên thì SQlite sẽ cố gắng chuyển nó thành số nguyên.
Những thứ kia. chuỗi “123” sẽ biến thành số nguyên 123 và các giá trị còn lại sẽ được viết “nguyên trạng”.

Vì vậy, có thể không chỉ định loại cột nào cả?
Điều này rất thường xuyên được thực hiện: TẠO BẢNG foo (a,b,c,d).
Còn kiến ​​trúc thì sao? Không có máy chủ?
Không có máy chủ, bản thân ứng dụng là một máy chủ. Việc truy cập vào cơ sở dữ liệu diễn ra thông qua các “kết nối” đến cơ sở dữ liệu (giống như một trình xử lý tệp hệ điều hành), mà chúng ta mở thông qua lệnh gọi đến hàm DLL tương ứng. Khi mở, tên của tệp cơ sở dữ liệu được chỉ định. Nếu không có thứ đó, nó sẽ tự động được tạo.
Có thể chấp nhận việc mở nhiều kết nối tới cùng một cơ sở dữ liệu (thông qua tên tệp) trong cùng một ứng dụng hoặc các ứng dụng khác nhau.
Hệ thống sử dụng các cơ chế chặn truy cập tệp ở cấp hệ điều hành để làm cho tất cả hoạt động
(các cơ chế này thường không hoạt động tốt trên ổ đĩa mạng nên không nên sử dụng SQlite với file trên mạng).
Ban đầu, SQlite hoạt động theo nguyên tắc “đọc nhiều, một viết”.
Nghĩa là, chỉ có một kết nối ghi vào cơ sở dữ liệu tại một thời điểm nhất định. Nếu các kết nối khác cũng cố gắng ghi, chúng sẽ gặp lỗi SQLITE_BUSY.
Tuy nhiên, bạn có thể nhập thời gian chờ hoạt động. Sau đó, kết nối đối mặt với cơ sở dữ liệu bận rộn sẽ đợi N giây trước khi thất bại với lỗi SQLITE_BUSY.
Vậy chúng ta nên làm gì?
Một kết nối và tất cả các yêu cầu thông qua nó hoặc tiến hành từ một khoảng thời gian chờ có thể và cung cấp khả năng lặp lại việc thực thi SQL.
Có một khả năng khác: cách đây không lâu một loại nhật ký SQlite mới đã xuất hiện: Write Ahead Log, WAL.
Nếu bạn bật chế độ nhật ký cụ thể này cho cơ sở dữ liệu thì một số kết nối sẽ có thể sửa đổi cơ sở dữ liệu đồng thời.
Nhưng ở chế độ này, cơ sở dữ liệu đã chiếm một số tệp.
Chà, bây giờ thì đã rõ tại sao SQLite lại tệ đến thế, vì nó không có GLOBAL CACHE?
Thật vậy, tất cả các RDBMS hiện đại đều không thể tưởng tượng được nếu không có bộ đệm chung chung, bộ đệm này có thể lưu trữ tất cả các loại tính năng như các truy vấn được tham số hóa đã biên dịch. Việc này được thực hiện bởi một máy chủ không có ở đây. Tuy nhiên, trong cùng một ứng dụng, SQlite có thể chia sẻ bộ đệm giữa một số kết nối (đọc tại đây: www.sqlite.org/sharedcache.html) và tiết kiệm một số bộ nhớ.
Tại sao mọi người phàn nàn rằng SQLite chậm?
Hai lý do. Đầu tiên là cài đặt mặc định. Họ làm việc vì độ tin cậy chứ không phải hiệu suất.
Thứ hai là thiếu hiểu biết về cơ chế ghi chép giao dịch. Theo mặc định, sau bất kỳ lệnh nào, SQlite sẽ thực hiện giao dịch (nghĩa là đợi cho đến khi cơ sở dữ liệu ở trạng thái nhất quán trước khi tắt nguồn). Tùy thuộc vào chế độ hoang tưởng, SQLite sẽ tiêu tốn từ 50 đến 300 ms cho việc này (chờ kết thúc quá trình ghi dữ liệu vào đĩa).
Tôi nên làm gì? Tôi cần chèn 100 nghìn bản ghi và nhanh chóng!
Xóa chỉ mục, bật chế độ đồng bộ TẮT (hoặc BÌNH THƯỜNG), chèn vào các phần N nghìn (N - chọn, lấy 5000 để bắt đầu). Trước khi chèn một phần, hãy BẮT ĐẦU GIAO DỊCH, sau - CAM KẾT.
Nhưng tôi đã tìm thấy một sai lầm! Làm thế nào để báo cáo?
Không đời nào.

Vấn đề là, sự phổ biến của SQLite thật đáng sợ - nó có ở khắp mọi nơi. Tôi không đùa.
Và các nhà phát triển đã phải đối mặt với hàng loạt thông báo lỗi do hiểu lầm hoặc do các yêu cầu tính năng bị ẩn. Họ thực sự đã đóng cửa việc tiếp nhận trực tiếp các báo cáo có sai sót.
Vì vậy, bạn nên đăng ký danh sách gửi thư và đăng vấn đề của mình ở đó và hy vọng điều tốt nhất.

Cá nhân tôi đã gặp một tình huống mà tôi cho là có khiếm khuyết trong SQLIte. Tôi đã mô tả điều này trong bản tin. Hoạt động của SQLite đã được sửa trong phiên bản tiếp theo.

Một tiện ích tiện dụng để sử dụng SQLite.

Còn tiếp.

Thẻ: Thêm thẻ

SQLite Editor được thiết kế để chỉnh sửa cơ sở dữ liệu trong các ứng dụng khác nhau. Chương trình có thể được tích hợp trực tiếp vào RooTExplorer để thuận tiện hơn.

đặc trưng

Các nhà phát triển làm việc với SQL sẽ có thể xem và chỉnh sửa dữ liệu trong cơ sở dữ liệu trực tiếp trên nền tảng di động. Bạn có thể lưu kết quả ngay lập tức mà không làm gián đoạn hoạt động tiếp theo của ứng dụng bên thứ ba.
Ứng dụng SQLite Editor hoạt động tốt với RootExplorer. Trình quản lý tệp mở ra những khả năng mới để sử dụng ứng dụng, cho phép bạn mở cơ sở dữ liệu trực tiếp từ trình quản lý tệp. Ngoài ra, trong trình quản lý, bạn có thể thêm cơ sở dữ liệu vào mục yêu thích, sắp xếp và lưu trữ chúng một cách thuận tiện. Ngoài ra còn có một tab chứa lịch sử của các chương trình đã mở gần đây. Những tính năng này giúp điều hướng và tìm kiếm cơ sở dữ liệu đã chỉnh sửa dễ dàng hơn nhiều để bạn có thể thực hiện các thay đổi sau này.

Đặc điểm

Ứng dụng có thể hoạt động có hoặc không có quyền root. Trong trường hợp sau, quyền truy cập chỉ được cung cấp vào cơ sở dữ liệu của những ứng dụng được cài đặt trên thẻ SD. Ngoài ra, như đã lưu ý ở trên, ứng dụng được kết hợp chặt chẽ với RootExplorer và trình quản lý tệp này yêu cầu quyền siêu người dùng để hoạt động. Điều duy nhất có thể làm phức tạp việc sử dụng ứng dụng là thiếu bản địa hóa tiếng Nga. Nhưng sự bất tiện này được bù đắp hoàn toàn bằng sự ổn định và tốc độ hoạt động, điều hướng rõ ràng và các chức năng quen thuộc dành cho các nhà phát triển làm việc với SQL.

SQLite là một cơ sở dữ liệu quan hệ được nhúng, nhỏ gọn. Mã nguồn thư viện đã được phát hành vào phạm vi công cộng. Năm 2005, dự án đã nhận được Giải thưởng Nguồn mở Google-O'Reilly.

Từ "nhúng" có nghĩa là SQLite không sử dụng mô hình máy khách-máy chủ, nghĩa là công cụ SQLite không phải là một quy trình chạy riêng biệt mà chương trình tương tác với nó, nhưng cung cấp một thư viện mà chương trình được liên kết và công cụ này trở thành một phần không thể thiếu của chương trình. Do đó, các lệnh gọi hàm (API) của thư viện SQLite được sử dụng làm giao thức trao đổi. Cách tiếp cận này làm giảm chi phí, thời gian phản hồi và đơn giản hóa chương trình. SQLite lưu trữ toàn bộ cơ sở dữ liệu (bao gồm định nghĩa, bảng, chỉ mục và dữ liệu) trong một tệp tiêu chuẩn duy nhất trên máy tính nơi chương trình được thực thi. Việc thực hiện đơn giản đạt được do trước khi bắt đầu giao dịch ghi, toàn bộ tệp lưu trữ cơ sở dữ liệu sẽ bị khóa; Các chức năng ACID đạt được, trong số những thứ khác, bằng cách tạo một tệp nhật ký.

Một số tiến trình hoặc luồng có thể đọc dữ liệu đồng thời từ cùng một cơ sở dữ liệu mà không gặp vấn đề gì. Việc ghi vào cơ sở dữ liệu chỉ có thể được thực hiện nếu hiện tại không có yêu cầu nào khác đang được phục vụ; nếu không, nỗ lực ghi không thành công và mã lỗi sẽ được trả về chương trình. Một tùy chọn khác là tự động lặp lại các lần ghi trong một khoảng thời gian nhất định.

Gói này cũng bao gồm một phần chức năng của máy khách dưới dạng tệp thực thi sqlite3, thể hiện việc triển khai các chức năng của thư viện chính. Phần máy khách hoạt động từ dòng lệnh và cho phép bạn truy cập tệp cơ sở dữ liệu dựa trên các chức năng tiêu chuẩn của hệ điều hành.

Nhờ kiến ​​trúc công cụ, có thể sử dụng SQLite cả trên hệ thống nhúng và trên các máy chuyên dụng có mảng dữ liệu gigabyte.

SQLite hỗ trợ gõ dữ liệu động. Các loại trường có thể có: INTEGER, REAL, TEXT, BLOB.

Sử dụng SQLite

Bản thân thư viện SQLite được viết bằng C; có một số lượng lớn các liên kết với các ngôn ngữ lập trình khác, bao gồm Delphi, C++, Java, C#, Visual Basic .NET, Perl, PureBasic, Tcl (các công cụ Tcl đi kèm với SQLite), Haskell, Schema, Smalltalk và Parser. như nhiều người khác. Danh sách đầy đủ các công cụ hiện có có sẵn trên trang dự án.

Sự đơn giản và dễ dàng nhúng SQLite đã khiến thư viện được sử dụng trong các trình duyệt, máy nghe nhạc và nhiều chương trình khác.

Cụ thể, SQLite được sử dụng:

  • - môi trường để chạy các ứng dụng (một phần);
  • Tự động;
  • Khung ;
  • khuôn khổ Yii; (Trong kho);
  • Nền tảng XUL được cung cấp bởi Gecko 1.9+, 1.9+ và có thể là tất cả các ứng dụng dựa trên nền tảng này, bao gồm:
  • Một số mẫu máy định vị GPS của Garmin;
  • API Android;
  • Minetest.

Nhiều chương trình hỗ trợ SQLite dưới dạng định dạng lưu trữ dữ liệu (đặc biệt là Mac OS và iOS, Android), bao gồm:

  • 1C:Enterprise 7.7 (sử dụng thành phần bên ngoài);
  • 1C:Enterprise 8.3 (để lưu trữ các mục nhật ký);
  • Adobe Photoshop Lightroom;
  • Eserv;
  • Điểm F;
  • (kể từ phiên bản 3.0);
  • Daminion;

Bạn có làm việc với cơ sở dữ liệu SQL không? Sau đó, ứng dụng này chắc chắn sẽ có ích - với sự trợ giúp của nó, bạn có thể xem, chỉnh sửa và lưu cơ sở dữ liệu trong bất kỳ ứng dụng nào.

Đặc điểm

SQLite Editor không yêu cầu quyền siêu người dùng theo mặc định. Nhưng không có chúng, nó sẽ chỉ cho phép bạn chỉnh sửa và lưu cơ sở dữ liệu đã sửa đổi của những ứng dụng được cài đặt trên MicroSD.

Ngược lại, với quyền root, bạn sẽ có thể điều chỉnh cơ sở dữ liệu của bất kỳ ứng dụng nào - bao gồm cả những ứng dụng nằm trên bộ nhớ trong.

Chương trình tương tác tốt với chức năng của trình quản lý tệp RootExplorer. Với sự trợ giúp của nó, bạn có thể mở cơ sở dữ liệu trong ứng dụng một cách thuận tiện, xem chúng trong danh mục.

Ngoài ra, thư mục tệp cho phép bạn thêm các tệp SQL vào mục yêu thích của mình, giúp bạn dễ dàng tìm thấy chúng hơn. Ngoài ra còn có một lịch sử (nó cũng có trong chính ứng dụng), nơi chứa thông tin về các đường dẫn gần đây.

Thiết kế nội thất

Chương trình chỉ mang một tải chức năng. Vì vậy, bạn có thể quên đi vẻ đẹp trong giao diện. Menu chính được trình bày với màu xanh đậm và đen.

Phông chữ đơn giản và các biểu tượng giả 3D là một số tính năng khác của giao diện.

Ngoài ra, không có bản địa hóa tiếng Nga. Tuy nhiên, điều này không ngăn cản những người dùng hiểu biết trong việc điều hướng các công cụ của tiện ích.

Chương trình tiện dụng này sẽ trở thành trợ lý đáng tin cậy cho những người đam mê công nghệ và người dùng nâng cao muốn thực hiện các thay đổi đối với ứng dụng trực tiếp trên thiết bị di động của họ.