thisismyfirstclone
Senior Member
À vì mình thấy bạn đang hiểu sai nên mới comment vậy thôi.He cám ơn bác bổ sung. Em không làm low level nên thấy đoạn bác nói về low level rất khai sáng. Em đang theo hướng buffer write dùng queue như bác nói, nhưng chắc nên bổ sung thêm việc "batching" nữa: đại loại sẽ "gộp" các lệnh write vào để đỡ bị nhiều. Ví dụ lệnh +100, +200 thì gộp thành lệnh +300 cũng là một cách để đỡ nặng.
Về trade-off bác nói cũng đúng. Cả hệ thống lẫn phương pháp, mỗi thứ mình chọn sẽ có ưu, nhược điểm riêng, tùy trường hợp mà mình nên chọn cái phù hợp. Ví dụ nếu như yêu cầu dữ liệu load nhanh, nhưng không nặng phải mới nhất/up to date thì có thể chơi cache xong refresh. Cái việc nên trường hợp rồi chọn phù hợp thì cũng tự nhận em chưa đủ trình để đưa ra một cái thực sự bao quát, mà thường vào tình huống thực tế mới nói được :stick:
Bạn đang nghiên cứu về database, điều đó là ổn. Nhưng nếu hiểu sai các khái niệm cơ bản thì việc đọc hiểu các khái niệm khác (trong trường hợp này là db) cũng sẽ dẫn đến sai. Từ đấy việc áp dụng của bạn sẽ sai.
Nếu tìm hiểu về lịch sử database, bạn sẽ thấy trước đây, nhiều db còn bỏ qua hệ điều hành để tự operate.
Các file systems hiện nay (dòng ext trên linux hoặc ntfs trên windows) đều dùng buffer writes để ghi. Do đó nó cần có một phương thức để bảo toàn việc ghi, đó là dùng một journal logs. Cách làm này na ná như transactions trong db, nghĩa là trước khi writes, file systems sẽ commit các việc muốn làm vào file log đó trước. Chỉ khi việc ghi vào file log được commit, việc writes thực sự mới bắt đầu. Nếu xảy ra crash, file system chỉ cần nhìn vào file log để revert lại.
Các database hiện nay đều dùng cách này (tuy nhiên cách đặt tên file log, và cách sử dụng file log có khác nhau đôi chút).
Nếu bạn đã dùng mongodb, bạn sẽ biết là muốn dùng transactions trong mongodb, bạn cần config replicaset trước. Một trong những lý do cho điều này là trong replicaset có tính năng oplog. Giờ thì bạn hiểu (một cách khái quát nhất) oplog để làm gì rồi đấy.


) óc chó đ' cãi được