Tại sao web không sử dụng SQLite mà cần mySQL, MS SQL Server, mongoDB, etc?

Xin chào anh chị,
Nếu 1 web CRUD thông thường, web server & database chạy cùng trên 1 máy tính, database này không có nhu cầu remote trong network luôn, database chỉ có nhiệm vụ cung cấp data và chỗ lưu trữ data cho code backend đang chạy trong web server thôi. Vậy thì không cần cài MS SQL server, mySQL, mongoDB, … như một service chạy 24/7 trên OS mà chỉ cần cài SQLite thôi (hay một database đơn giản dạng file) có được không? Web lớn thì phải cần đến RDBMS database vì chịu được traffic cao, có cơ chế auth, instance db chạy multi-theard, etc, … Vấn đề này em hiểu rồi ạ, nhưng nếu web nhỏ nhỏ, web ế ít user thì sử dụng SQLite có khác biệt gì không?
P/S: em test thử rồi, chạy thì vẫn chạy nhưng tại sao trong thực tế không ai làm như vậy á.
Em cảm ơn.

Câu này chốt nè, bạn không có nhu cầu, cũng chưa thấy cần gì thì có gì phải lăn tăn

Vì người ta rảnh hơn bạn, người ta thích, và hàng vạn lý do khác

5 Likes

Uhm, như @kisuluoibieng đề cập, nếu cậu chưa có nhu cầu sử dụng gì hơn SQLite, cậu có thể sử dụng nó.

Về việc các website ấy có thể không dùng SQLite, tớ nghĩ chắc cậu cũng đồng ý là không ai design website với suy nghĩ:

  • Website sẽ chỉ phục vụ vài người mãi mãi.
  • Website này sẽ chỉ dùng để đọc thông tin.
  • Nếu ai đó muốn cập nhật website, website sẽ bị treo, những người khác sẽ phải chờ một lúc để website available rồi mới được đọc tiếp.
  • Thay vì dùng file để lưu trữ dữ liệu cho website, dùng SQLite, vì nó nghe giống như chúng ta đang sử dụng RDBMS (SQLite là sự thay thế tương đương của file, chứ không phải thay thế cho các hệ quản trị CSDL khác).

Đó có lẽ là lý do sao cậu thấy website dùng SQLite hiếm vậy :smile:

Hope it helps!

8 Likes

Kể từ điểm hỏi đến bây giờ web em dùng Sqlite vẫn chạy bình thường ạ, web phục vụ team khoảng 10 user, khoảng 1-3 lượt truy cập đồng thời. Không ai cảm thấy lag gì cả.

1 Like

Đọc bài của bạn mình biết bạn nghĩ sao? Liệu bạn là anh chàng nào trong câu chuyện này.

4 Likes

Mục tiêu của người ta là những trang web siêu to khổng lồ, phục vụ cho trăm triệu người dùng, doanh thu trăm tỏi, thì họ mới khoe chứ, còn mấy cái web nội bộ phục vụ tầm chục người như bạn nói người ta cũng chẳng quan tâm lắm đâu.

2 Likes

Mình không có ý khoe khoang gì cả, trong thực tế mình thấy mỗi gặp chủ đề “build web” là mọi người nghĩ ngay đến mySQL, postgresql, mongo, … như một phản xạ, kể cả build web cá nhân để ghi chú vẫn là mySQL nên mình mới thắc mắc SQLite có vấn đề gì tại sao không ai nghĩ đến trước tiên mỗi khi muốn build một app quy mô nhỏ. Mình đã hỏi nhiều người về trường hợp họ sử dụng SQLite khi nào thì chưa thấy ai trả lời dùng SQLite làm web cả.

Với tình hình giá thuê Cloud azure, AWS ngày càng đắt đỏ thì nhu cầu build web cá nhân dùng SQLite sẽ rất hợp lý.

Và gitea là app đầu tiên mình thấy có áp dụng SQLite vào làm web https://hub.docker.com/r/gitea/gitea

Mình đã dành 1 năm để build một số web util cho cá nhân và team, mình đã dùng SQLite để thử nghiệm và nhận được kết quả nên cập nhật cho mọi người (ý mình là sinh viên khóa sau trong lúc search google sẽ có thêm thông tin có ích).

Ban đầu mình đã không hướng đến web to, mình đã giới hạn scope là những loại web như landing page, cửa hàng cực nhỏ như quán phở đầu ngỏ, …

Nếu bạn định build web util như:

  • todo list
  • web ghi chú cá nhân
  • tự host git dùng cá nhân như trên
  • web truyền clipboard khi sử dụng VPS, …

Muốn tiết kiệm chi phí hơn có thể dùng raspberry PI 4 làm server hoặc thuê gói reservations / saving plan

Các sẽ sẽ bảo những loại web cá nhân như trên trên google có đầy nhưng nếu những case liên quan đến policy, tính cơ động, triển khai nhanh, … thì sẽ thấy nó hiệu quả. Nếu cần giải pháp build web khi search google thì đa số kết quả đều recommend mySQL nhưng tùy vào nhu cầu bạn có thể cân nhắc dùng SQLite hoặc dùng file CSV làm DB và thêm một thư viện chỉ vài kb có khả năng query file CSV bằng SQL.

Các bạn đừng hiểu lầm mình muốn khoe khoang, topic này sẽ có giá trị với những dev gặp tình huống như mình. Mình chỉ revew tính khả thi của giải pháp dựa trên 1 năm sử dụng SQLite và file CSV làm DB. Hiện tại gói min của Cloud là 1 CPU và 0.5GB RAM theo mình thì chỉ có SQLite là phù hợp nhất cho gói cước này.

Nếu cty cuối tuần đi du lịch, sếp muốn làm một web realtime và public thông tin cho team dễ truy cập, web chỉ lưu thông tin đơn giản như:

  • các địa điểm cần check in
  • Thực đơn trong ngày
  • giờ xe khởi hành
  • Tú bỏ tiền túi mua vé xe về kế toán nhớ trả lại, Mai bỏ quên nón trên xe, Tú có mang theo trái cây, …

Thì bạn sẽ làm sao giải bài toán này để đáp ứng:

  • Tất cả mọi người đều truy cập được
  • Web thật simple, thật simple
  • Không tốn quá 30 phút làm việc
  • Có thể CRUD

A. Dùng app có sẵn như google sheet, notion, excel online, … rồi share link (nhưng trong team có cô chú lớn tuổi và dùng Iphone 5 liệu có quá phiền khi bắt họ tải thêm app)
B. Vẫn chày cối dùng mySQL, mongo cho task đơn giản bên trên
C. Dùng SQLite và code vài dòng JS, HTML và deploy lên cloud với giá chỉ bằng cốc cafe

realtime? bạn có đang nhầm lẫn không?
nếu bạn không nhầm lẫn, thì câu trả lời là dùng những cái có sẵn, chứ chẳng ai build cái thật simple mà realtime cả

mình cảm thấy bạn đang rất chày cối với việc dùng sqlite, kiểu như mọi người phải công nhận cái bạn đang làm là hợp lý mới được

đầu tiên là mình xin khẳng định lại, không có gì gọi là đúng hay sai ở đây cả, chỉ cần đáp ứng được nhu cầu, thì nó chắc chắn là hợp lý
như vậy, bạn dùng sqlite là hợp lý

tiếp theo là phân tích 1 tí những ý mà bạn đưa ra

  1. sao bạn không đặt câu hỏi ngược lại, tại sao phải dùng sqlite mà không dùng mongo?
  2. người ta không có nhu cầu thật đặt biệt và vừa khít giống y chang nhu bạn
    theo như bạn nói thì người ta dùng những app có sẵn rồi, làm chi cho mệt
    còn nếu đã muốn làm, sao lại phải tự co cụm mình làm, chẳng mở rộng được gì
    giữa một lựa chọn có thể dễ dàng mở rộng phát triển và một cái bị hạn chế đủ các thứ thì bạn chọn cái nào => bạn chọn cái nào cũng được thôi, vì bạn thích
    nếu nói nhanh, thì dùng cái có sẵn chắc chắn nhanh hơn
    nếu không cần nhanh, build chơi, thoã mãn bản thân, có thể mở rộng thì dùng mấy cái kia chắc chắn là sự lựa chọn tốt hơn
    sqlite không có gì đó nổi bật cả

web chỉ là tên của một loại ứng dụng. như bạn nói, web tự 1 mình bạn xài, thì bạn muốn dùng gì chả được,
tính năng đơn giản, tính cá nhân quá cao nên cũng ai share những cái như vậy cả, bạn không thấy ai làm web dùng sqlite cũng rất bình thường

“web cá nhân” này phục vụ cho việc gì? và host ở đâu?
mình chưa thấy có cái định nghĩa chung “web cá nhân” là cái gì, có tính năng gì?
đã không rõ ràng thì chắc chắn không có cái giải pháp gọi là hợp lý

có thể đây là cái đầu tiên bạn thấy, nhưng không phải là cái duy nhất
và theo như cái ví dụ bạn đưa ra, sqlite là một option, chứ không phải nó được build với sqlite, mà cái có nhiều option database như này thì quá xá nhiều

=> nhìn chung, những gì bạn đưa ra cũng chỉ lòng vòng nhu cầu của bạn, tự đáp ứng nhu cầu của bản thân bạn, nên bạn chọn gì cũng sẽ hợp lý
trong thực tế người ta không có nhu cầu giống bạn, nếu có thì cũng có thể sử dụng sqlite, cũng có thể không
dùng sqlite không sai
dùng cái khác cũng không sai

người ta có thể đồng tình hay không đồng tình với quan điểm của bạn, và ngược lại, không ai đúng ai sai ở đây cả

chia sẻ một chút về cá nhận mình và sqlite

  • mình vẫn dùng sqlite cho một số mục đích cả nhân, thậm chí là công việc, cụ thể hơn:
    mình mở api cho bên đổi tác tích hợp, mình build một web giả lập bên đối tác để gọi vào api của mình và test => như mấy cái phục vụ cá nhân kiểu này, ai đâu mà share
    một số ứng dụng có nhiều option cấu hình db, mình vẫn chọn một số loại đơn giản như h2 hay sqlite

trờ lại với vấn đề, tại sao khi nói tới làm web người ta lại không cho sqlite vào danh sách các lựa chọn?
vì khi nói tới làm web, người ta không nghĩ về những web kiểu như bạn đưa ra, người ta nghĩ về việc làm web thương mại, phục vụ cho nhiều người đó là phản ứng rất tự nhiên

ví dụ như bạn lớn, học đại học, ba me nói đang xem xét mua “xe” cho bạn, thì bạn có nghĩ rằng ba mẹ bạn xem xét mua xe đạp hoặc xe hơi hay không? hay bạn sẽ nghĩ ngay tới xe máy, wave, siruus, feature, vision…?
tất nhiên, vẫn có một xác xuất ba mẹ mua xe hơi cho bạn đi học, nhưng nó cũng giống như bạn nghĩ về sqlite khi nói làm “web” (một cách chung chung) như vậy đó
cũng có thể nhà bạn là giới siêu giàu, mua cả máy bay luôn
nhưng ở một cái ngữ cảnh thông thường, thì người ta nghĩ ngay tới wave, sirius, vision, future có hợp lý hơn xe đạp asama hay xe hơi camry không

2 Likes

Với mình, SQLite chỉ dùng trong 2 trường hợp:

  • Data cần lưu ít và đơn giản
  • Không muốn cài database server (như Android có sẵn SQLite, hoặc các standalone desktop app)

Như 2 bác @library@kisuluoibieng đã nói ở trên, trừ các use case đặc thù, còn lại không có lý do gì phải dùng SQLite cả.

Ps: mình có câu hỏi cho bạn đây, ngoài SQLite bạn có dùng loại SQL database nào khác không? Có cảm giác bạn đang cố “hợp lý hóa” việc sử dụng SQLite để biện minh cho việc ngại học công nghệ khác.

3 Likes

Thời gian mình bỏ ra để làm việc với DB là MSSQL > mySQL > mongo.

Công việc của mình là:

  • Demo framework mới cho fresher, sinh viên, học viên, đồng nghiệp.
  • Làm prototype, project mockup để demo cho khách hàng (dùng SQLite để gửi qua email cho tiện).
  • Viết docs, viết example, snippet code, …
  • Làm slide thuyết trình code.
  • Và mình build một số web util cá nhân.

Sản phẩm mình làm ra chưa bao giờ được được 10 lượt truy cập đồng thời và web của mình mỗi tháng cũng chỉ vài trăm lượt truy cập nên mình chưa cảm nhận được hạn chế của SQLite vì chưa bao giờ giải quyết bài toán lượng truy cập đồng thời cao (Case của mình thì dùng DB nào cũng như nhau, lúc đầu mình nghĩ SQL không thể làm full được project, cho dù làm được cũng hoạt động không ổ định, nhưng mình đã dùng SQLite giải quyết case của mình và chợt nhớ lại topic này)

Dù sao cũng cảm ơn mọi người đã dành thời gian phân tích vấn đề cho mình.

1 Like

Bạn chủ topic hiểu nhầm ý mình, mình không ý nói rằng bạn khoe khoang đâu, mà bạn chỉ là la lên rằng “Tui có con heo SQLite và nó màu hồng, tui yêu nó lắm lắm, ôm nó mỗi ngày”. Trong khi gã khác nghe buồn bực quá hét lên “Tao ghét con heo màu hồng tên SQLite, tao thích con chim lửa Firebird mà thôi”. Vậy là một anh cứ heo hồng, anh còn cứ chim đỏ… và rồi anh em Dạy Nhậu Học chỉ muốn kéo đàn cò, đánh chiêng, gõ mõ để tiễn những gã quá khích như vậy.

Ai đang dùng SQLite? Hàng triệu người, trong đó có các nhà Firefox, Google, Boeing, NASA, Adobe,… toàn những gã khổng lồ dùng đấy chứ.

Điều đó không có nghĩa rằng chủ topic cứ khăng khăng rằng SQLite là đã đáp ứng tốt hết, chẳng việc gì phải dùng cái khác, và khả năng mở rộng cũng tốt. Nhưng các dự án anh ta đưa ra toàn là dự án quy mô gọi là 1 người viết, không thấy anh ta chỉ ra dự án nào có 5 thằng code cả, và anh ta có lẽ không biết đến khái niệm DBA là cái gì luôn…

Mình thì không có vấn đề gì với SQLite hoặc các cơ sở dữ liệu khác. Hiện nay minh vẫn dùng SQLite 3 để lưu trữ một cơ sở dữ liệu 13 ngàn người, mỗi ngày phục vụ trung bình 250 người trong suốt giờ hành chính, mỗi tiếng ước tính một người query vào dữ liệu khoảng 5 lần, cơ sở dữ liệu tăng lên khoảng 60MB/ ngày. Chạy từ trước Covid tới nay chưa gặp sự cố gì. Nhưng điều đó không có nghĩa là dự án khác mình cũng lại tiếp tục SQLite mà mình dùng đến IBM DB2, một CSDL mà không thông dụng lắm ở thị trường VN, nhưng nó là cái giúp mình xử lý vấn đề mà nếu dùng SQLite có thể mình sẽ phải nghiên cứu đủ sâu, và nhiều năm để trở thành lập trình viên phát triển database engine đủ để chỉnh chọc SQLite nhằm đáp ứng yêu cầu. Chi phí cơ hội ở đây là gì? Chủ topic có hiểu chi phí cơ hội là gì không?

Kể cả việc cá nhân mình rất ghét Microsoft (đến mức chỉ dùng Windows 93 mà thôi) nhưng vẫn có những dự án sử dụng SQL Server đấy thôi. Vấn đề ở đây, là dân kỹ thuật, chúng ta không phải là những tín đồ giáo phái, cho nên nếu cuồng tín vào sản phẩm/ công cụ nào nhiều quá thì không nên, nó làm cho chúng ta trở thành kẻ lập dị, khó tham gia vào làm những dự án chung với người khác.

Mặc dù người ta hay nói cá nhân xuất chúng có thể lợi hại bằng vạn quân, nhưng con người làm chủ thế giới này là nhờ phối hợp tập thể, không phải đánh nhau tay đôi với cọp, sư tử. Các sản phẩm phần mềm mạnh đa phần là sản phẩm của tập thể, không phải của một cá nhân nào. Do vậy mà nếu chủ topic làm phần mềm chỉ một mình cày cuốc không nói làm gì, còn làm chung dự án với người khác mà cứ đòi dùng SQLite thì có khi bị từ chối cho gia nhập team.

Túm lại là câu chuyện SQLite có thể cân mọi thứ thì nên dừng ở đây. Chủ topic thích thì cứ dùng, nhưng đừng cố đi “thuyết giáo” rằng người khác cũng nên như mình, điều đó là tốn thời gian vô ích, gây hiềm khích, mất vui, bực cái cửa mình thì ngủ mất ngon.

Chủ topic nếu muốn thấy rằng anh ta thử làm phần mềm/ web cần tìm kiếm liên quan đến Unicode, nếu tìm kiếm dạng fulltext search nữa thì anh ta chợt nhận ra SQLite làm anh ấy điên đầu :smiley: chứ không phải cứ SQLite là ngon lành máng lợn/ cành đào nào cả.

3 Likes
  1. Thói quen.
  2. Người ta luôn nghĩ rất xa đến tình huống web sẽ dc sử dụng cho nhiều người.
  3. Thực tế vẫn nhiều web dùng sql lite như các web nội bộ, nhóm nhỏ hoặc k cần lưu quá nhiều data, hay các web cung cấp các utility tools mà không yêu cầu đăng ký thành viên.
    Chính vì ít người dùng nên mới thấy không phổ biến.

Câu hỏi của bạn rất rõ ràng nhưng lại thích suy diễn vấn đề thành khoe trang web.

1 Like

Phù hợp đạt được mục đích thì xài thôi. right tool for right job.
Trang offical sqlite cũng nói các trường hợp có thể xài rồi mà:
https://www.sqlite.org/whentouse.html

5 Likes

mindset của ban rất tốt nhưng hơi nhát. mạnh tay lên.
muốn biết có ổn hay không đơn giản nhất là cứ thử benchmark thấy đủ xài thì xài. sợ méo gì. mắc gì cứ phải psql, mysql.

đây cũng từng làm cái website bán son đơn giản cho người quen, chơi ghi thẳng vô RAM + ghi ra dump state của app từ RAM hằng ngày làm backup. web cứ chạy ào ào chả sợ ai vì traffic có tới nhiu đâu mà sợ :sweat_smile:.

3 Likes

Ngày xưa mình dùng biến static thay cho database luôn nhưng chưa dám đưa cách này vào production, nay biết thêm cách dump ra file CSV của bác @catlord :rofl:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?