SQL Server và Mongo có thể được sử dụng cùng nhau không?


14

Chúng tôi có một trang web định hướng tin tức lớn có lưu lượng truy cập web cao. Kiến trúc là lớp DB - Repo thường thấy - Lớp dịch vụ - Asp.Net MVC. Vấn đề mà chúng tôi đã thấy là xung quanh hiệu suất đọc. Nó chỉ ra rằng tất cả các công cụ đối tượng miền DDD này là tuyệt vời, theo lý thuyết, cho các quy tắc kinh doanh, nhưng đã làm cho cuộc sống khó khăn hơn khi tối ưu hóa hiệu suất đọc.

Là một giải pháp, tôi đang xem xét một thứ hoàn toàn mới (đối với chúng tôi): sử dụng noQuery. Tôi muốn sử dụng cơ sở dữ liệu noQuery cho dữ liệu được trình bày trên trang web của chúng tôi. Chúng tôi không thể thoát khỏi Máy chủ SQL của mình (ít nhất là không sớm bất kỳ lúc nào), nhưng dường như một bước thực tế sẽ là sử dụng Mongo làm cơ sở dữ liệu truy vấn cho tất cả sự phát triển mới.

Câu hỏi của tôi là liệu chúng ta có thể sử dụng cơ sở dữ liệu SQL Server như hồ sơ của bạn và Mongo như truy vấn cơ sở dữ liệu của bạn lại với nhau ?

Vì vậy, khi một trong những biên tập viên của chúng tôi cập nhật một bản ghi, dữ liệu sẽ được lưu trữ trong SQL Server. Điều này là cần thiết, bởi vì có quá nhiều mã kế thừa không thể được viết lại qua đêm.

Nhưng khi người xem trên trang web xem một bài viết hoặc một danh sách các bài viết, tôi muốn tận dụng hiệu suất của Mongo so với SQL Server. Để giữ cho dữ liệu hiện tại, hãy giả sử 15 phút hoặc ít hơn, dữ liệu SQL Server sẽ cần làm mới Mongo. RDBMS có các công cụ sao chép cho các hoạt động như thế này và tôi tự hỏi liệu có tồn tại bất cứ điều gì để làm tương tự từ SQL Server đến Mongo không. Máy chủ Lync, có thể?


3
Khả thi? Tất nhiên là có thể, như hai cửa hàng dữ liệu riêng biệt. Chính xác thì bạn đang hỏi gì ở đây?
Oded

Nhưng bạn có thể sử dụng chúng cùng nhau? Với Mongo DB hoạt động cơ bản như một bộ đệm chỉ đọc cho dữ liệu?
Giăng

1
Một lần nữa, tất nhiên bạn có thể "sử dụng chúng cùng nhau". Nhưng không rõ điều đó có nghĩa là gì. Miễn là bạn có một số loại cơ chế cập nhật cho mongo, bạn tốt để đi. Xem các bài đăng của Udi Dahan - nhưng tùy thuộc vào bạn để xác định cơ chế.
Oded

1
Chúng tôi chưa bao giờ chuyển sang MongoDB, tuy nhiên có vẻ như năm tới chúng tôi có thể. Một cách chuyển tiếp mà chúng tôi đã thực hiện là lưu trữ JSON trong các trường varchar. Từ mọi thứ tôi đã đọc, không có cách nào tốt để di chuyển dữ liệu qua lại giữa NoQuery và SQL - tất cả sẽ cần phải được tùy chỉnh, đặc biệt là vì các cơ sở dữ liệu NoQuery khác nhau rất nhiều về cách họ làm việc .
Giăng

1
@ John nếu bạn đang muốn gắn bó với mối quan hệ và sẵn sàng rời khỏi SQL Server, bạn có thể muốn xem Postgresql và tích hợp json của nó . Do đó, lưu trữ dữ liệu trong một cột json mà sau đó có thể được thao tác trong cơ sở dữ liệu.

Câu trả lời:


13

Bạn đã gặp phải một vấn đề mà nhiều người gặp phải trước bạn ... một cơ sở dữ liệu được tối ưu hóa để đọc hiếm khi tốt cho hiệu quả ghi và ngược lại. Một cách tiếp cận đã phát triển từ trở ngại đọc-ghi này là CQRS (Phân chia trách nhiệm truy vấn lệnh). Mặc dù Wikipedia liên kết hai CQRS và CQS với nhau về mặt kỹ thuật là khác nhau. CQS chỉ yêu cầu một phương thức thực hiện thay đổi (lệnh) hoặc hỏi thông tin (truy vấn) không bao giờ cả hai.

CQRS tiến thêm một bước và chỉ định rằng bạn có một mô hình riêng cho Truy vấn và Lệnh. Bước duy nhất này cho phép những thứ như tách cơ sở dữ liệu đọc và ghi của bạn. Đó là những gì bạn muốn làm.

Tôi không thể nói rằng tôi là một chuyên gia về Mongo hoặc định cấu hình nó để hoạt động với SQL Server. Nhưng theo hiểu biết của tôi, mọi người sử dụng Mongo như một cái nhìn không chuẩn hóa về cơ sở dữ liệu giao dịch của họ. Cập nhật Mongo từ db giao dịch có thể bắt đầu chạy SQL Agent. Hoặc có một dịch vụ riêng để thăm dò cơ sở dữ liệu.

Một sự thay thế thậm chí tốt hơn sẽ là để dịch vụ Chỉ huy của bạn kích hoạt một sự kiện bất cứ khi nào bản cập nhật được thực hiện. Sau đó, bạn sẽ có một dịch vụ lắng nghe sự kiện đó và cập nhật MongoDB với thông tin đó. Đó là cách tiếp cận cơ bản đối với Tìm nguồn sự kiện (tìm kiếm Nguồn tìm sự kiện trên trang).

Greg Young, một trong những nhà lãnh đạo tư tưởng trong thế giới DDD hiện đang viết một cuốn sách trong Sê-ri chữ ký Fowler trên CQRS có tên là Event-Centric (trước đây được gọi là CQRS). Fowler đã viết một bài đăng trên bliki của mình mô tả cách tiếp cận


CQRS +1 rất phù hợp ở đây. Sử dụng các sự kiện để điền và cập nhật cơ sở dữ liệu tài liệu được sử dụng để xây dựng chế độ xem của bạn và để lại cơ sở dữ liệu sql của bạn.
quentin-starin

Chúng tôi chưa áp dụng hệ thống CQRS, tuy nhiên tôi đã chú ý đến những gì Greg, Udi và những người khác đã viết. Một phần lớn của CQRS không phải là một nền tảng cụ thể, mà chỉ nghĩ về các lệnh và truy vấn riêng biệt. Tôi không nghĩ rằng Greg đã từng viết một cuốn sách, mặc dù các mô hình và thực tiễn của Microsoft đã phát hành một cuốn sách.
Giăng

1
Điều duy nhất tôi muốn thêm vào câu trả lời này là: Nếu trường hợp sử dụng của bạn đặc biệt xoay quanh việc sử dụng điều này với MS SQL và MVC, bạn đã xem xét BrightstarDB thay vì MongoDB cho phần NoQuery chưa? Nó có tính tương thích Entity Framework và LINQ, có thể dễ dàng chuyển đổi cho bạn.
CrazyPyro 17/03/2015

1

Đúng. Trong dự án hiện tại của tôi, chúng tôi sẽ nhận dữ liệu và lưu trữ nó trong SQL Server và sau đó xây dựng các chỉ mục tìm kiếm bằng Lucene / Solr và lưu trữ dữ liệu đó trong MongoDB. Mặc dù vậy, việc nhập MongoDB được thực hiện với trình tải tùy chỉnh - không có bản sao SQL Server hoặc tự động làm mới.


Được rồi tôi chỉ tò mò, tại sao không trực tiếp dân cư mongo? Bạn có bị hạn chế như nhau khi phải sử dụng cả hai?
yati sagade

Máy chủ SQL hiện tại của chúng tôi không thể được viết lại qua đêm. Tôi nghĩ rằng đây là một bước nhỏ, nhưng hữu ích.
Giăng

@yatisagade: Phải. Chúng tôi có các báo cáo phải chạy với SQL Server, nhưng chúng tôi có một ứng dụng tìm kiếm toàn cầu sử dụng các chỉ mục Lucene.
TMN
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.