2012-04-16 54 views
6

Đây là quan điểm của tôi và tôi không chắc chắn nó đúng hay sai:Cách hoạt động của nhật ký MongoDB

Nhật ký nhật ký là nhật ký "làm lại". Nó ghi lại sự sửa đổi của các tập tin dữ liệu. Ví dụ, tôi muốn thay đổi giá trị trường của một bản ghi từ 'a' sang 'b', sau đó mongodb sẽ tìm cách sửa đổi dbfile (bao gồm tất cả không gian tên, dữ liệu, chỉ mục, v.v.), sau đó mongodb viết các sửa đổi cho tạp chí.

Sau đó, mongodb thực hiện tất cả các sửa đổi thực sự đối với tệp tin dbfile. Nếu có gì sai ở đây, khi mongoDB khởi động lại nó sẽ đọc tạp chí (nếu nó tồn tại). Sau đó nó sẽ thay đổi thay đổi dbfile để làm cho tập dữ liệu nhất quán.

Vì vậy, trong tạp chí, dữ liệu thay đổi không được ghi lại, mà thay vào đó là cách thay đổi tệp tin dbfile.

Tôi có đúng không? Tôi có thể lấy thêm thông tin về định dạng của tạp chí ở đâu?

+0

Bạn có thể đọc mã nguồn. Đó là nguồn thông tin đáng tin cậy nhất. –

+0

thx cho đề xuất của bạn, thực sự tôi đang đọc ngay bây giờ. Nhưng nó sẽ tốn quá nhiều thời gian, tôi chỉ muốn câu trả lời ngay bây giờ. – iammutex

+0

Tại sao lại quan trọng? –

Trả lời

6

EDIT: liên kết ban đầu của tôi đến bản trình bày 2011 tại MongoSF của Dwight hiện đã bị chết, nhưng có một số 2012 presentation bởi Ben Becker có nội dung tương tự.

Chỉ trong trường hợp dừng hoạt động tại một thời điểm nào đó, tôi sẽ cung cấp tóm tắt nhanh về cách nhật ký trong công cụ lưu trữ MMAP gốc hoạt động, nhưng cần lưu ý rằng với sự ra đời của mô hình pluggable storage engine (MongoDB 3.0 và sau này), điều này bây giờ hoàn toàn phụ thuộc vào công cụ lưu trữ (và khả năng các tùy chọn) mà bạn đang sử dụng - vì vậy hãy kiểm tra.

Quay lại nhật ký động cơ lưu trữ gốc (MMAP). Ở một mức độ rất thô sơ, tạp chí chứa một loạt các hoạt động xếp hàng và tất cả các hoạt động được viết vào nó khi chúng xảy ra - về cơ bản chỉ nối thêm một ghi tuần tự vào đĩa.

Khi các hoạt động này đã được áp dụng và được xả vào đĩa, thì chúng không còn cần thiết trong tạp chí và có thể bị loại ra ngoài. Theo nghĩa này, tạp chí về cơ bản hoạt động như một bộ đệm tròn cho các hoạt động ghi.

Nội bộ, các hoạt động trong nhật ký được lưu trữ trong "nhóm cam kết" - một nhóm hoạt động viết hợp lý. Khi một hoạt động nằm trong một nhóm cam kết hoàn chỉnh, nó có thể được coi là được đồng bộ hóa với đĩa như là một phần của tạp chí (và sẽ đáp ứng các mối quan tâm viết j:true chẳng hạn). Sau khi tắt máy không hoạt động, mongod sẽ cố gắng áp dụng tất cả các nhóm cam kết hoàn chỉnh trước đây chưa được chuyển sang đĩa, các nhóm cam kết không đầy đủ sẽ bị hủy.

Các thao tác trong nhật ký không phải là những gì bạn sẽ thấy trong oplog, thay vào đó chúng là tập hợp các tệp, dời gốc (vị trí đĩa cơ bản) và dữ liệu được ghi tại vị trí. Điều này cho phép phát lại dữ liệu hiệu quả, và cho một định dạng nhỏ gọn cho tạp chí, nhưng sẽ làm cho nội dung trông giống như vô nghĩa đối với hầu hết (trái ngược với oplog nói trên mà về cơ bản có thể đọc được dưới dạng tài liệu JSON). Điều này về cơ bản trả lời một trong những câu hỏi đặt ra - nó không có bất kỳ nhận thức về nội dung của tập tin cơ sở dữ liệu và những thay đổi được thực hiện với nó, nó thậm chí còn đơn giản hơn - về cơ bản chỉ biết đến vị trí đĩa X và ghi dữ liệu Y, đó là nó.

Tính chất liên tiếp của tạp chí có nghĩa là nó phù hợp trên đĩa quay và mẫu truy cập tuần tự thường có tỷ lệ truy cập dữ liệu MMAP (mặc dù không nhất thiết là mẫu truy cập của các công cụ khác) . Do đó đôi khi bạn nên đặt tạp chí trên đĩa hoặc phân vùng của riêng nó để giảm sự cạnh tranh IO.

+0

liên kết bị hỏng. vui lòng sửa số – blueskin

+1

@ blueskin - yêu cầu và bạn sẽ nhận được –

Các vấn đề liên quan