2010-05-26 32 views
23

Tôi quan tâm đến việc triển khai một kiến ​​trúc có hai cơ sở dữ liệu cho một hoạt động đọc và một cho viết. Tôi chưa bao giờ thực hiện một cái gì đó như thế này và đã luôn luôn xây dựng cơ sở dữ liệu duy nhất, hệ thống rất bình thường vì vậy tôi không khá chắc chắn nơi để bắt đầu. Tôi có một vài phần cho câu hỏi này.

1. Điều gì sẽ là tài nguyên tốt để tìm hiểu thêm về kiến ​​trúc này?
2. Có phải chỉ là vấn đề sao chép giữa hai lược đồ giống hệt nhau, hay các lược đồ của bạn sẽ khác nhau tùy thuộc vào các hoạt động, bình thường hóa có khác nhau không?
3. Làm cách nào để đảm bảo rằng dữ liệu được ghi vào một cơ sở dữ liệu có sẵn ngay lập tức để đọc từ cơ sở dữ liệu thứ hai?Làm cách nào để triển khai các cơ sở dữ liệu riêng biệt cho các hoạt động đọc và viết?


Mọi trợ giúp, mẹo, tài nguyên khác sẽ được đánh giá cao. Cảm ơn.

EDIT
Sau khi một số nghiên cứu tôi đã tìm thấy bài viết này mà tôi tìm thấy rất nhiều thông tin cho những người quan tâm ..

http://www.codefutures.com/database-sharding/

tôi thấy highscalability này article rất nhiều thông tin

+0

Tôi rất tò mò là tại sao. Đừng hiểu lầm tôi, tôi không cho rằng đây là một ý tưởng tồi, nhưng tôi chưa bao giờ nghe về một mẫu thiết kế như vậy, và tôi rất tò mò về lý do tại sao đây sẽ là một mô hình tốt để thực hiện. (Tất nhiên, tôi nhận ra đây có thể là một kiểu thiết kế chung mà tôi chưa bao giờ gặp trước đây.) – David

+1

Bạn có nghĩ nhiều hơn một cơ sở dữ liệu để sử dụng bình thường không, và đó là chỉ đọc cho mục đích báo cáo? Bởi vì đó là một kịch bản phổ biến hơn. Có một cơ sở dữ liệu để truy cập chỉ ghi có hầu như không có trường hợp sử dụng khả thi. –

+0

Nếu các cơ sở dữ liệu được đồng bộ hóa, tôi không chắc chúng là cơ sở dữ liệu riêng biệt. Bạn có thể muốn đọc về một cái gì đó giống như hệ thống tập tin journaling. – WhirlWind

Trả lời

14

Tôi không phải là chuyên gia nhưng đọc cơ sở dữ liệu tổng thể/ghi và read-only nô lệ mẫu là một mô hình "chung", đặc biệt là cho các ứng dụng lớn làm chủ yếu là đọc truy cập hoặc kho dữ liệu:

  • nó cho phép mở rộng quy mô (bạn thêm read-only nô lệ nếu có yêu cầu)
  • nó cho phép để điều chỉnh cơ sở dữ liệu khác nhau (cho một trong hai hiệu quả đọc hoặc viết hiệu quả)

Điều gì sẽ là một nguồn lực tốt để tìm hiểu thêm về kiến ​​trúc này?

Có sẵn các tài nguyên tốt trên Internet. Ví dụ:

là nó chỉ là một vấn đề sao chép giữa hai các lược đồ giống nhau hoặc các lược đồ của bạn sẽ khác nhau tùy thuộc vào hoạt động, bình thường hóa có khác nhau không?

Tôi không chắc chắn - Tôi háo hức đọc câu trả lời từ các chuyên gia - nhưng tôi nghĩ các lược đồ giống hệt nhau trong scenari sao chép truyền thống (điều chỉnh có thể khác nhau). Có lẽ mọi người đang làm những điều kỳ lạ hơn nhưng tôi tự hỏi liệu họ có dựa vào nhân rộng cơ sở dữ liệu trong trường hợp đó không, nó có vẻ giống như "ETL thời gian thực".

Làm cách nào để đảm bảo rằng dữ liệu được ghi vào một cơ sở dữ liệu có sẵn ngay lập tức để đọc từ cơ sở dữ liệu thứ hai?

Tôi đoán bạn sẽ cần sao chép đồng bộ cho điều đó (tất nhiên là chậm hơn không đồng bộ). Mặc dù một số cơ sở dữ liệu hỗ trợ chế độ này, nhưng không phải tất cả đều làm AFAIK. Nhưng hãy xem this answer hoặc this one cho SQL Server.

+0

@Pascal Thivent ~ Đây không phải là http://en.wikipedia.org/wiki/Command-query_separation – jcolebrand

+0

@drachenstern: Tôi không chắc chắn CQS ngụ ý bất cứ điều gì về cách bạn lưu trữ dữ liệu. Nhưng cảm ơn, đó là một liên kết rất thú vị. –

+0

@Pascal Thivent ~ Tôi đã suy nghĩ nhiều hơn về tham chiếu về việc có một quán pub/sub sync arch giữa hai.Tôi cũng nghĩ rằng bài viết có hình ảnh khi tôi mù liên quan đến nó: http://www.udidahan.com/2008/08/11/command-query-separation-and-soa/ – jcolebrand

1

Liên quan đến câu hỏi 2:

Nó thực sự phụ thuộc vào những gì bạn đang cố gắng để ac hieve bởi có hai cơ sở dữ liệu. Nếu nó là vì lý do hiệu suất (mà tôi nghi ngờ nó có thể được) tôi sẽ đề nghị bạn nhìn vào denormalizing cơ sở dữ liệu chỉ đọc khi cần thiết cho hiệu suất. Nếu hiệu suất không phải là một vấn đề thì tôi sẽ không gây rối với lược đồ chỉ đọc.

Tôi đã làm việc trên các hệ thống tương tự, nơi sẽ có cơ sở dữ liệu đọc/ghi chỉ được người dùng quản trị sử dụng nhẹ. Cơ sở dữ liệu đó sau đó sẽ được sao chép vào cơ sở dữ liệu chỉ đọc trong một quy trình hàng đêm.

Câu hỏi 3: Chúng ta đang nói ngay lập tức ở đây như thế nào? Chưa đầy một giây? 10 giây? Phút?

3

Bạn có thể tra cứu kho dữ liệu. Chúng phục vụ như cơ sở dữ liệu kiểu 'bình thường hóa cho báo cáo', trong khi bạn có thể giữ một thể hiện kiểu OLTP được chuẩn hóa để bảo trì dữ liệu.

Tôi không nghĩ ý tưởng tương đương 'ngay lập tức' sẽ là hiện thực. Sẽ có sự chậm trễ trong khi dữ liệu mới và thay đổi được di chuyển sang hệ thống khác. Lịch trình và phạm vi sẽ là quyết định lớn của bạn ở đây.

+1

+1. Matt - tra cứu OLTP và OLAP. Sử dụng một cơ sở dữ liệu để hỗ trợ công việc giao dịch nhanh (chẳng hạn như để hỗ trợ một ứng dụng) và dữ liệu ETL theo yêu cầu cho một cơ sở dữ liệu khác được xây dựng để được báo cáo. Vì chúng là riêng biệt, bạn không nhận được lượt truy cập hiệu suất trên một ảnh hưởng đến người khác. Di chuyển dữ liệu giữa các cơ sở dữ liệu là một vấn đề phức tạp trên chính nó - tùy thuộc vào lượng dữ liệu cần di chuyển và tần suất; khi mọi người nói rằng họ muốn sao chép "thời gian thực" giữa các nguồn thực sự có nghĩa là gì (bạn cần phải xác minh) vì thời gian thực cho máy tính nhanh hơn nhiều so với thời gian thực đối với con người. –

Các vấn đề liên quan