Tôi nghĩ rằng, bạn đang có ý tưởng rằng các chỉ mục được lưu trữ trong RAM. Điều gì sẽ xảy ra nếu tôi nói rằng họ không phải.
Trước hết chúng ta cần hiểu chỉ mục là gì, chỉ mục về cơ bản là một con trỏ để cho biết tài liệu đó đang ở đâu trên đĩa. Giống như chúng ta lập chỉ mục trong sách, để truy cập nhanh hơn, chúng ta có thể xem chủ đề là gì trên số trang nào.
Vì vậy, khi các chỉ mục được tạo, chúng cũng được lưu trữ trong đĩa, Nhưng khi một ứng dụng đang chạy, dựa trên việc sử dụng thường xuyên và thậm chí truy cập nhanh hơn, chúng được tải vào RAM nhưng có sự khác biệt giữa được tải và được tạo.
Ngoài ra, tải một chỉ mục không giống như tải một bộ sưu tập hoặc các bản ghi vào RAM. Nếu chúng tôi đã tải chỉ mục, chúng tôi biết tất cả tài liệu cần lấy từ đĩa, không giống như tải tất cả tài liệu và xác minh từng tài liệu trong số đó. Vì vậy, các chỉ mục tránh quét bộ sưu tập.
Việc tạo chỉ mục là quá trình diễn ra một lần, nhưng mỗi lần ghi trên tài liệu có thể có khả năng thay đổi việc lập chỉ mục, vì vậy một số phần có thể cần được tính toán lại vì các bản ghi có thể bị xáo trộn dựa trên sự thay đổi trong dữ liệu. đó là lý do tại sao lập chỉ mục giúp ghi chậm và đọc nhanh.
Một lần nữa, hãy nghĩ về một cuốn sách, nếu bạn thêm một chủ đề mới nói 2 trang vào giữa cuốn sách, tất cả các chỉ mục sau số chủ đề đó cần được tính toán lại. cho phù hợp.
- Không, các bản ghi không được lưu trữ trong RAM, trong khi tạo nó sẽ xử lý tất cả tài liệu trong bộ sưu tập và tạo một bảng chỉ mục, điều này có thể hiểu là tốn thời gian nếu có quá nhiều tài liệu, đó là lý do tại sao một tùy chọn để tạo chỉ mục trong nền.
- Chỉ mục được tạo một lần, bạn có thể xóa nó và tạo lại, nhưng nó sẽ không được tạo lại trên ứng dụng hoặc khởi động lại DB. điều đó sẽ thật điên rồ đối với bộ sưu tập khổng lồ trong môi trường bị phân mảnh.
- Một lần nữa, điều đó không đúng. _id xuất hiện dưới dạng trường được lập chỉ mục, vì vậy chỉ mục đã được tạo cho tập hợp trống, vì khi bạn ghi, nó sẽ tính toán lại chỉ mục. Vì đây là một chỉ mục duy nhất nên việc xử lý sẽ nhanh hơn.
- tất cả các bản ghi sẽ chỉ được lưu trữ trong RAM khi bạn đang sử dụng công cụ trong bộ nhớ của MongoDB, mà tôi nghĩ đây là phiên bản doanh nghiệp. Do lập chỉ mục, nó sẽ không tự động tải bản ghi vào RAM.