Các trang web sử dụng nội bộ: Có trường hợp hấp dẫn nào chống lại SQLite không?


23

Nhiều khung web, như Flask hoặc Django sử dụng SQLite làm cơ sở dữ liệu mặc định của chúng. SQLite hấp dẫn bởi vì nó được bao gồm trong python và chi phí quản trị khá thấp.

Tuy nhiên, hầu hết các trang web sản xuất công cộng có lưu lượng truy cập cao đều sử dụng cơ sở dữ liệu nặng hơn: mySQL, Oracle hoặc postgresql.

Các câu hỏi :

Giả định:

  • Lưu lượng truy cập trang web ở mức vừa phải và việc truy cập đọc / ghi đồng thời vào cơ sở dữ liệu sẽ xảy ra
  • Chúng tôi sẽ sử dụng SQLAlchemy với các khóa ghi SQLite (mặc dù nhận xét này khiến tôi hơi lo lắng)
  • Cơ sở dữ liệu sẽ chứa khoảng 60.000 hồ sơ
  • Cấu trúc dữ liệu không yêu cầu các tính năng nâng cao được tìm thấy trong cơ sở dữ liệu nặng hơn

Đã bao giờ có một trường hợp hấp dẫn chống lại sự tương tranh SQLite cho các trang web hoạt động như các công cụ nội bộ lưu lượng truy cập vừa phải chưa? Nếu vậy, điều kiện nào sẽ khiến SQLite gặp vấn đề tương tranh?

Tôi đang tìm kiếm các nguyên nhân gốc cụ thể đã biết, thay vì sợ hãi chung / chỉ tay không căn cứ.


Làm thế nào là sqllite với các tính năng như sao chép, vv có thể hữu ích cho sao lưu vv? Trong SQLlite tôi có ấn tượng rằng ứng dụng sở hữu db. Bạn có thể chạy các kịch bản quản trị, vv trong khi ứng dụng của bạn không hoạt động?
Doug T.

1
Một số giai thoại về SQLite và đồng thời (chủ yếu là tích cực): truy cập đồng thời sqlite3
Daniel B

1
Trong trường hợp của một trang web nội bộ, lý do bắt buộc đối với SQLite là gì? Bất kỳ hạn chế nào khi cài đặt RDBMS?
JeffO

Ngoài việc đơn giản hóa môi trường phát triển trên máy tính xách tay của nhà phát triển cá nhân thì không có lý do. Câu hỏi tất nhiên là liệu chúng ta có thể đơn giản hóa hợp lý môi trường phát triển và sản xuất hay không
Mike Pennington

Câu trả lời:


23

Tôi khuyên bạn nên đọc câu trả lời chính thức cho câu hỏi của bạn, Sử dụng phù hợp cho SQLite . Cụ thể, "Tình huống trong đó một RDBMS khác có thể hoạt động tốt hơn" cảnh báo rằng SQLite không hỗ trợ viết đồng thời:

SQLite hỗ trợ số lượng người đọc đồng thời không giới hạn, nhưng nó sẽ chỉ cho phép một người viết bất cứ lúc nào. Đối với nhiều tình huống, đây không phải là một vấn đề. Mỗi ứng dụng làm cơ sở dữ liệu của nó hoạt động nhanh chóng và di chuyển, và không có khóa nào tồn tại trong hơn vài chục mili giây. Nhưng có một số ứng dụng đòi hỏi đồng thời nhiều hơn và những ứng dụng đó có thể cần tìm kiếm một giải pháp khác.

Từ góc độ phù hợp, tôi có xu hướng xem SQLite như một định dạng tệp rất tinh vi hỗ trợ các truy vấn SQL. Tôi có xu hướng tránh SQLite nếu tôi muốn tách cơ sở dữ liệu của mình khỏi ứng dụng web của mình, vì nó không được tối ưu hóa cho trường hợp này. Nói tóm lại, SQLite không đủ khả năng mở rộng để sử dụng trong một số tình huống, vì vậy những người đang chạy các trang web hy vọng một ngày nào đó trở nên phổ biến có thể tốt hơn là bắt đầu với một cái gì đó có thể mở rộng, thay vì đi bằng SQLite và sau đó bị buộc phải chuyển đổi.

Tất cả những gì đang được nói, SQLite có thể tốt cho hầu hết các trang web nội bộ; thông thường các trang web nội bộ không yêu cầu cùng mức độ đồng thời và khả năng mở rộng.


Cũng không làm hầu hết các trang web bên ngoài. Công cụ cơ sở dữ liệu có thể được hoán đổi nếu sử dụng cái gì đó giống như EF, mặc dù PostGres có thể là lựa chọn tốt hơn ngay từ đầu.
Robert Harvey

@RobertHarvey EF là gì?
Mike Pennington

@MikePennington: Khung thực thể. Tôi tưởng tượng có những ORM khác cũng có tính minh bạch của cơ sở dữ liệu hoặc ít nhất có thể trao đổi các trình điều khiển.
Robert Harvey

1
Tương đương pythonic sẽ là một cái gì đó giống như SQL Alchemy
Wyatt Barnett

"Tôi có xu hướng xem SQLite là một định dạng tệp rất tinh vi hỗ trợ các truy vấn SQL." Định nghĩa hoàn hảo.
tự đại diện

4

Đội mũ Giám đốc CNTT của tôi, tôi thấy một vài điều không hay ở đây:

  • Nguy cơ tham nhũng dữ liệu. Có lẽ nhiều hơn so với thực tế nhưng cuối ngày, đây là một loại tệp DB không giao dịch, không có nhiều nếu có bất kỳ lời đề nghị nào viết xấu ngoài việc hỏi bạn đã có bản sao lưu gần đây chưa. Nói về mà . . .
  • Làm thế nào để tôi sao lưu điều này lên? Theo cách tôi biết tôi đã có một bản sao tốt. Tốt nhất là không dùng ứng dụng ngoại tuyến.
  • Làm thế nào tôi có thể bảo mật truy cập vào DB? Hiểu biết chung của tôi là SQL lite không có quyền truy cập hệ thống tập tin, đây là một khởi đầu tốt nhưng không phải là tất cả, cuối cùng. Đặc biệt đối với các ứng dụng web nơi bạn có thể muốn có nhiều quyền tốt nghiệp hơn DBA hoặc không có gì.

Từ quan điểm của nhà phát triển, tôi nghĩ điều quan trọng là phải biết tại sao SqlLite là mặc định - đó là vì nó dễ dàng và nó được trình diễn tốt. Nếu bạn đang "bán" một nền tảng cho các nhà phát triển mới, việc có thể kích hoạt một ứng dụng web hoạt động với sự ồn ào tối thiểu là chìa khóa. Và việc phải đứng lên và cấu hình đúng máy chủ cơ sở dữ liệu sẽ là một trở ngại lớn cần tránh.


1
Chà, sao lưu có thể được thực hiện thông qua API sao lưu SQLite . Tôi sẽ thừa nhận SQLite có thể không hoàn toàn an toàn theo mặc định, vì, không giống như các hệ thống hướng dịch vụ, các máy khách SQLite nói chuyện trực tiếp với tệp cơ sở dữ liệu. Điều đó nói rằng, SQLite sử dụng một tạp chí để bảo vệ chống lại các lỗi hệ thống và đáng tin cậy nếu hệ điều hành máy chủ hỗ trợ đúng cách các khóa nguyên thủy mà SQLite sử dụng (I / O đĩa mạng không). Trang web chính thức liệt kê một số tình huống sẽ dẫn đến cơ sở dữ liệu SQLite bị hỏng.
Brian

SQLite là giao dịch . Sử dụng API sao lưu hoặc điều chỉnh kịch bản sao lưu của MediaWiki để thực hiện sao lưu trực tuyến. Hiểu biết chung của bạn về mô hình bảo mật của SQLite là chính xác. Các lời khuyên an ninh chính thức là 'sử dụng cảm giác chung': suy nghĩ về cách mọi người có thể truy cập tập tin cơ sở dữ liệu của bạn và thiết kế ứng dụng web của bạn cho phù hợp.
Iain Samuel McLean Elder

@Brian - Tôi rất khó để nghĩ về một DB khác có toàn bộ trang dành riêng cho "làm thế nào cơ sở dữ liệu này có thể bị hỏng". Tôi sẽ nói thêm rằng tôi thấy dự án sql lite thật tuyệt vời - họ có thể có trang đó bởi vì chúng là loại hạt và cũng có 10 dòng mã thử nghiệm cho mỗi dòng mã sản xuất và thực sự muốn chắc chắn và kỹ lưỡng.
Wyatt Barnett
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.