Nếu MongoDB có gót chân achilles thì thực tế là nó chỉ hỗ trợ ghi đơn luồng và giảm bản đồ theo luồng đơn.
Như mọi khi, có sự đánh đổi ở đây. Ghi đơn luồng là cách đơn giản nhất để tránh các vấn đề về khóa và giảm thiểu chi phí. Tương tự như vậy, thu nhỏ bản đồ đa luồng là một cách tuyệt vời để khóa dữ liệu của bạn. Vì vậy, việc giảm bản đồ theo luồng đơn trên hệ thống sản xuất có lẽ dễ dàng hơn và an toàn hơn.
Tuy nhiên, bạn không phải không có công cụ ở đây. MongoDB sẽ cung cấp một luồng ghi cho mỗi trường hợp. Vì vậy, nếu bạn phân đoạn MongoDB, thì bạn sẽ nhận được một luồng ghi cho mỗi phân đoạn.
Nếu bạn muốn có nhiều chỉ mục trên 2 tỷ hàng, bạn sẽ muốn xem xét độ sắc nét. Một số phép toán nhanh ở đây:MongoID là 12 byte. Chỉ mục trên MongoID sẽ là 2B * 12 byte =22GB +. Nếu bây giờ bạn muốn thêm hai chỉ mục nữa (thậm chí chỉ là hai số nguyên 4 byte), chúng tôi đang nói về 7,5GB cho mỗi chỉ mục.
Vì vậy, ở hàng 2B, bạn đang nói về việc có hơn 37GB trong chỉ mục ( tối thiểu ). Trên hầu hết các máy chủ 8 lõi, điều đó có nghĩa là bạn thậm chí sẽ không thể giữ các chỉ mục của mình trong bộ nhớ, chứ đừng nói đến bất kỳ dữ liệu nào.
Vì vậy, nếu bạn muốn có hiệu suất nghiêm túc ở đây, bạn sẽ muốn bắt đầu xem xét sharding. Chỉ dựa trên những con số chung. FWIW, MySQL sẽ không thể xử lý tài liệu 2B thành thạo hơn. Với nhiều dữ liệu như vậy, bạn thực sự sẽ muốn nhiều máy chủ theo kịp tải.