Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL và MongoDB 1000 lần đọc

MongoDB không nhanh hơn một cách kỳ diệu. Nếu bạn lưu trữ cùng một dữ liệu, được sắp xếp về cơ bản theo cùng một kiểu và truy cập nó theo cùng một cách, thì bạn thực sự không nên mong đợi kết quả của mình quá khác biệt. Xét cho cùng, MySQL và MongoDB đều là GPL, vì vậy nếu Mongo có một số mã IO tốt hơn một cách kỳ diệu trong đó, thì nhóm MySQL có thể kết hợp nó vào cơ sở mã của họ.

Mọi người đang thấy hiệu suất MongoDB trong thế giới thực phần lớn vì MongoDB cho phép bạn truy vấn theo một cách khác phù hợp hơn với khối lượng công việc của bạn.

Ví dụ:hãy xem xét một thiết kế chứa nhiều thông tin về một thực thể phức tạp theo kiểu chuẩn hóa. Điều này có thể dễ dàng sử dụng hàng chục bảng trong MySQL (hoặc bất kỳ db quan hệ nào) để lưu trữ dữ liệu ở dạng bình thường, với nhiều chỉ mục cần thiết để đảm bảo tính toàn vẹn quan hệ giữa các bảng.

Bây giờ hãy xem xét cùng một thiết kế với một kho tài liệu. Nếu tất cả các bảng có liên quan đó đều phụ thuộc vào bảng chính (và chúng thường là như vậy), thì bạn có thể lập mô hình dữ liệu sao cho toàn bộ thực thể được lưu trữ trong một tài liệu duy nhất. Trong MongoDB, bạn có thể lưu trữ tài liệu này dưới dạng một tài liệu duy nhất, trong một bộ sưu tập duy nhất. Đây là lúc MongoDB bắt đầu kích hoạt hiệu suất vượt trội.

Trong MongoDB, để truy xuất toàn bộ thực thể, bạn phải thực hiện:

  • Một lần tra cứu chỉ mục trên bộ sưu tập (giả sử thực thể được tìm nạp bằng id)
  • Truy xuất nội dung của một trang cơ sở dữ liệu (tài liệu json nhị phân thực tế)

Vì vậy, một tra cứu b-tree và một trang nhị phân được đọc. Nhật ký (n) + 1 IO. Nếu các chỉ mục có thể nằm hoàn toàn trong bộ nhớ thì 1 IO.

Trong MySQL với 20 bảng, bạn phải thực hiện:

  • Một lần tra cứu chỉ mục trên bảng gốc (một lần nữa, giả sử thực thể được tìm nạp bằng id)
  • Với chỉ mục được phân nhóm, chúng ta có thể giả định rằng các giá trị cho hàng gốc nằm trong chỉ mục
  • Hơn 20 tra cứu phạm vi (hy vọng là trên một chỉ mục) cho giá trị pk của thực thể
  • Đây có thể không phải là các chỉ mục được phân nhóm, vì vậy, hơn 20 lần tra cứu dữ liệu giống nhau khi chúng tôi tìm ra hàng con thích hợp.

Vì vậy, tổng số cho mysql, ngay cả khi giả sử rằng tất cả các chỉ mục đều nằm trong bộ nhớ (khó hơn vì có nhiều hơn 20 lần trong số chúng) là khoảng 20 lần tra cứu phạm vi.

Các tra cứu phạm vi này có thể bao gồm IO ngẫu nhiên - các bảng khác nhau chắc chắn sẽ nằm ở các vị trí khác nhau trên đĩa và có thể các hàng khác nhau trong cùng một phạm vi trong cùng một bảng cho một thực thể có thể không liền kề (tùy thuộc vào cách thực thể đó cập nhật, v.v.).

Vì vậy, đối với ví dụ này, kiểm đếm cuối cùng là khoảng 20 lần nhiều IO hơn với MySQL trên mỗi truy cập logic, so với MongoDB.

Đây là cách MongoDB có thể tăng hiệu suất trong một số trường hợp sử dụng .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tạo một chuỗi trong MySQL?

  2. MySQL JOIN với LIMIT 1 trên bảng đã tham gia

  3. Truy vấn nhiều cơ sở dữ liệu cùng một lúc

  4. JSON_EXTRACT () - Trả về dữ liệu từ tài liệu JSON trong MySQL

  5. Mẹo nhanh về MySQL:Sử dụng hàm LENGTH và TRIM