cuốn sách gpt4 ai đã làm

mysql - Kết hợp MySQL, Sphinx và MongoDB. Ý tưởng hay?

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 10:35:32 27 4
mua khóa gpt4 Nike

Đối với một dự án mới, tôi muốn sử dụng kết hợp MySQL, Sphinx và MongoDB. MySQL được sử dụng cho dữ liệu quan hệ và tìm kiếm số, Sphinx được sử dụng để tìm kiếm văn bản miễn phí và MongoDB được sử dụng cho dữ liệu địa lý. Theo như điểm chuẩn (nhanh) của tôi, MongoDB là truy vấn địa lý nhanh nhất, nhân sư là nhanh nhất cho tìm kiếm văn bản miễn phí và MySQL là nhanh nhất cho tìm kiếm dữ liệu quan hệ. Vì vậy, để có hiệu suất tốt nhất, tôi có thể phải kết hợp chúng vào dự án của mình.

Tuy nhiên, điều này có ba nhược điểm.

  1. Ba điểm lỗi, tức là Sphinx, MySQL và MongoDB có thể gặp sự cố khiến trang web của tôi bị dừng
  2. Tôi cần dữ liệu từ ba cơ sở dữ liệu và cần cập nhật chúng (tất cả dữ liệu chỉ thay đổi một lần một ngày, vì vậy đó không phải là vấn đề tồi tệ nhất).
  3. Các yêu cầu về phần cứng, chủ yếu là RAM, đang phát triển nhanh chóng vì tất cả các cơ sở dữ liệu đều mong đợi một phần lớn bộ nhớ có thể thực thi được.

Vì vậy, câu hỏi đặt ra là tôi có nên kết hợp cả ba, bỏ đi một (có thể là MongoDB và sử dụng Sphinx cho dữ liệu địa lý) hay chỉ sử dụng một (MongoDB hoặc MySQL)?

Để hình dung về dữ liệu, dữ liệu quan hệ khoảng 6GB, dữ liệu địa lý khoảng 4GB và dữ liệu văn bản miễn phí khoảng 16GB.

câu trả lời hay nhất

Không chắc liệu các bản ghi/bộ sưu tập/tài liệu có trong 3 cơ sở dữ liệu có tham chiếu giữa các cơ sở dữ liệu hay không. EG Nếu tên người dùng, chức vụ và số điện thoại ở Mysql thì địa chỉ người dùng ở Mongo. Tôi giả sử câu trả lời là có.

IMHO không nên sử dụng 3 giải pháp lưu trữ khác nhau vì:

1) (Quan trọng nhất) Bạn không thể tổng hợp dữ liệu từ 2 cơ sở dữ liệu (theo cách có thể mở rộng).

Ví dụ: Giả sử bạn lưu dữ liệu người dùng (tên người dùng) trong Mysql và tọa độ địa lý của người dùng ở Mongo. Bạn không thể truy vấn để lọc/sắp xếp một trường trên cả hai cơ sở dữ liệu. Ví dụ: bạn không thể:

CHỌN tất cả người dùng 
Ở ĐÂU tên bắt đầu bằng 'A'
SẮP XẾP THEO khoảng cách_từ_center

Điều tương tự cũng áp dụng cho Sphinx.

Giải pháp: Bạn giới hạn dữ liệu có sẵn trên một cơ sở dữ liệu hoặc sao chép/sao chép dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác.

2) Chi phí bảo trì: duy trì 3 máy chủ, chiến lược sao lưu/dự phòng khác nhau, chi phí phát triển mở rộng khác nhau: nhà phát triển phải sử dụng 3 thư viện truy vấn, 3 phương thức truy vấn khác nhau, v.v.

3) Các vấn đề về không nhất quán/đồng bộ hóa phải được xử lý thủ công (ví dụ: bạn muốn chèn dữ liệu vào cả mongo và mysql; giả sử mongo ghi dữ liệu, nhưng mysql ném ra ngoại lệ toàn vẹn tham chiếu, vì vậy bây giờ bạn có sự không nhất quán giữa các cơ sở dữ liệu)

4) Về giá thành phần cứng thì chỉ có MongoDB ngốn RAM thôi (gợi ý là nó phải có đầy đủ các chỉ số trong ram). Đối với máy chủ MySQL và Solr, bạn có thể kiểm soát mức tiêu thụ bộ nhớ.

Tôi sẽ làm gì:

  • Nếu tôi không cần tất cả các tính năng SQL (như giao dịch, tính toàn vẹn tham chiếu, phép nối, v.v.), tôi sẽ chọn Mongo

  • Nếu tôi cần những tính năng này và tôi có thể chấp nhận hiệu suất thấp hơn cho các hoạt động địa lý, tôi sẽ chọn MySQL

  • Bây giờ, nếu tôi cần (và ý tôi là, tôi thực sự, thực sự cần) tìm kiếm toàn văn và chức năng Mongo/Mysql FTS là không đủ, tôi cũng sẽ đính kèm một máy chủ FTS như Sphinx, Solr, Elaticsearch, v.v.

Giới thiệu về mysql - Kết hợp MySQL, Sphinx và MongoDB. Ý tưởng hay? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/6840760/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress