2013-05-08 26 views
5

Nhóm của tôi cần tìm giải pháp cho vấn đề sau:Làm cách nào để đảm bảo tính nhất quán của tập hợp có tính khả dụng cao?

Ứng dụng của chúng tôi cho phép người dùng xem tổng doanh thu cho doanh nghiệp, tổng số theo sản phẩm, tổng theo vùng, tổng theo khu vực x sản phẩm, tổng số theo khu vực x chia, vv Bạn nhận được ý tưởng. Có rất nhiều giá trị cần phải được tổng hợp để có được nhiều trong số những tổng số đó mà chúng không thể được tính toán một cách nhanh chóng - chúng ta phải tổng hợp trước chúng để cung cấp thời gian phản ứng tốt, một quá trình mất khoảng 5 phút.

Vấn đề mà chúng tôi nghĩ là một vấn đề phổ biến nhưng có thể không tìm thấy tham chiếu đến, là cách cho phép cập nhật các bán hàng khác nhau mà không cần tắt người dùng. Ngoài ra, người dùng không thể chấp nhận tính nhất quán cuối cùng - nếu họ xem chi tiết tổng số 12, họ sẽ thấy các con số tăng thêm đến 12. Vì vậy, chúng tôi cần Tính nhất quán + Tính khả dụng.

Giải pháp tốt nhất mà chúng tôi đưa ra cho đến nay là chuyển hướng tất cả truy vấn đến cơ sở dữ liệu thừa, "B" (tối ưu hóa cho truy vấn) trong khi cập nhật được chuyển hướng đến cơ sở dữ liệu chính "A". Khi chúng tôi quyết định dành 5 phút để cập nhật tất cả các tập hợp, chúng tôi cập nhật cơ sở dữ liệu "C", đó là một cơ sở dữ liệu thừa khác giống như "B". Sau đó, phiên người dùng mới được chuyển hướng đến "C", trong khi phiên người dùng hiện tại tiếp tục sử dụng "B". Cuối cùng, cảnh báo bất kỳ ai còn lại sử dụng "B", chúng tôi sẽ giết các phiên trên "B" và tổng hợp lại ở đó, trao đổi vai trò của "B" và "C". Kịch bản thoát nước điển hình.

Chúng tôi rất ngạc nhiên khi chúng tôi không thể tìm thấy bất kỳ cuộc thảo luận nào về vấn đề này và lo ngại rằng chúng tôi đang nghiên cứu kỹ vấn đề này hoặc có thể đó không phải là vấn đề mà chúng tôi nghĩ. Bất kỳ lời khuyên nào cũng được đánh giá cao.

+0

Chúng tôi đã có nhiều tiền tố tổng hợp, nhưng chúng tôi rất hài lòng với sự nhất quán cuối cùng, vì vậy chúng tôi không phải đưa ra các thủ thuật thông minh. Cách tiếp cận được đề xuất của bạn có vẻ khả thi. –

+0

@sergio Cảm ơn!Nhận xét cuối cùng của bạn cho tôi hy vọng. – RonR

Trả lời

2

Đây là một vấn đề thú vị nên tôi nghĩ về nó trên tàu, và tôi nghĩ ra việc lưu trữ một dấu thời gian cho mỗi hàng trong cơ sở dữ liệu mà bạn tổng hợp. (Tôi nghĩ kỹ thuật này có tên, nhưng nó thoát khỏi tôi và googling không tìm thấy nó ...)

Dấu thời gian sẽ cho biết khi hàng này được chèn vào. Ngoài ra:

-Nếu các hàng có thể được cập nhật, thì bạn sẽ có hai 'phiên bản' của hàng cùng một lúc, một phiên bản gần đây hơn dòng kia.

-Nếu các hàng có thể bị xóa, thì sẽ cần phải có hàng 'phiên bản đã xóa' chỉ định thời điểm nó bị xóa.

Bây giờ bạn có thể làm những việc như:

1) Giả sử bạn cập nhật tập hợp vào ngày 1 tháng 1 năm 2000 nửa đêm. Bạn có thể có các khung nhìn của bảng trả về dữ liệu của bảng như thể nó là Jan 1 2000 nửa đêm, bỏ qua tất cả các chèn/cập nhật/xóa gần đây hơn. Bây giờ các tập hợp được cập nhật như dữ liệu trong dạng xem và bạn có thể tiếp tục thêm dữ liệu vào bảng bên dưới.

2) Tôi không biết tính khả thi/dễ bảo đảm đáng tin cậy như thế nào, nhưng bạn có thể có 'tập hợp được tính toán khác biệt' vào ngày 2 tháng 1 năm 2000, bạn lấy tổng hợp ngày 1 tháng 1 năm 2000 nửa đêm và cập nhật chúng chỉ với dữ liệu đã được thay đổi kể từ thời điểm đó - giúp bạn tiết kiệm rất nhiều dữ liệu lịch sử.(Tất nhiên, nó sẽ trở nên nhiều hơn một khi bạn xem xét các hàng đang được cập nhật hoặc xóa đã cũ hơn 24 giờ)

3) Bất cứ khi nào bạn đưa tổng hợp của bạn cập nhật, bạn có thể hợp nhất các hàng đã cập nhật và bị xóa với phiên bản cũ hơn và nhận loại bỏ phiên bản cũ hơn, vì vậy bạn chỉ phải giữ bản sao của các hàng xung quanh khi bạn cần chúng để tách các hàng đã được tổng hợp và các hàng không có (điều này cũng có nghĩa là, nếu tất cả các tập hợp của bạn chạy cùng một lúc, và bạn cập nhật hàng ba lần liên tiếp nhanh chóng, bạn chỉ cần giữ hàng cập nhật gần đây nhất)

+0

Có, điều này được gọi là "phiên bản hàng" nhưng tôi không thấy nó sẽ giúp ích gì trong tình huống của chúng tôi. Các cập nhật sẽ xảy ra trong "A" nhưng chúng tôi vẫn cần phải có "B" vì "B" có lược đồ hoàn toàn khác được tối ưu hóa cho các truy vấn. – RonR

+0

@RonR Vâng, nếu bạn có thể loại bỏ C và vẫn có tính sẵn sàng cao + tính nhất quán, đó là vấn đề, phải không? Khi bạn tính toán tổng hợp mới, bạn thêm chúng vào dấu thời gian mới cho biết chúng có giá trị cho dữ liệu đến dấu thời gian đó - nếu bạn vẫn đang sử dụng tập hợp dữ liệu cũ, bạn vẫn chỉ tham chiếu đến các hàng đến dấu thời gian đó, nếu bạn trao đổi tổng hợp mới bạn tham chiếu đến các hàng lên đến dấu thời gian đó. – Patashu

+0

Đồng ý rằng đó là vấn đề. Tôi đã giải thích sai câu trả lời ban đầu của bạn như gợi ý rằng mọi thứ có thể được thực hiện chỉ với "A". – RonR

2

Nếu không thể tính toán cập nhật khi lưu trữ kết quả như bạn đang làm trong cơ sở dữ liệu khác giải quyết vấn đề về tính khả dụng với thời gian phản hồi nhanh hơn.

Để nhất quán, bạn có thể sử dụng một số hình thức cô lập giao dịch. Ví dụ, MySQL hỗ trợ một số mức giao dịch khác nhau, trong đó REPEATABLE READ có thể tiến gần đến việc cung cấp cho bạn một số tính nhất quán trong một giao dịch duy nhất. Nếu một giao dịch có thể được mở cho nhiều yêu cầu khi người dùng đi sâu để xem dữ liệu, họ có thể xem ảnh chụp nhanh trạng thái cơ sở dữ liệu theo yêu cầu đầu tiên.

Trong ý nghĩa chung hơn, bạn chỉ sau khi xử lý dữ liệu được khách hàng cung cấp để biểu thị một tập hợp nhất quán. Như trong câu trả lời của Patashu, việc xử lý cho một khách hàng yêu cầu một tập hợp các tập hợp có thể dựa trên thời gian. Giai đoạn đầu tiên của tương tác với khách hàng sẽ là xử lý dữ liệu tổng hợp mới nhất, ví dụ như thời gian hiện tại. Nếu sau đó sẽ vượt qua điều khiển đó với mỗi yêu cầu. Theo yêu cầu được thực hiện của máy chủ, nó sử dụng tay cầm để xác định tập hợp dữ liệu tổng hợp nào cần trả lại. Thay vì có cả hai máy chủ "B" và "C", tất cả dữ liệu tổng hợp có thể được lưu trữ trong máy chủ "B", với tất cả dữ liệu tổng hợp chứa thông tin xử lý. Điều này sau đó cho phép yêu cầu đến một máy chủ duy nhất cho dữ liệu tổng hợp cả mới và cũ. Tại một số thời điểm, dữ liệu tổng hợp cũ có thể được xóa khỏi "B".

Có thể tìm kiếm cách ly giao dịch sẽ tăng thêm kết quả để thảo luận về tính nhất quán.

+0

Hmmm.Điều này có khả năng xác định như là một cách để phân tán với sự cần thiết phải trao đổi 2 cơ sở dữ liệu, với chi phí của một số phức tạp bổ sung. cảm ơn bạn! – RonR

1

Tôi nghĩ rằng bạn đang tìm kiếm Data Warehousing khái niệm

Trong máy tính, một kho dữ liệu hoặc dữ liệu doanh nghiệp nhà kho (DW, DWH, hoặc EDW) là một cơ sở dữ liệu sử dụng để báo cáo và phân tích dữ liệu. Đây là kho dữ liệu trung tâm được tạo bằng cách tích hợp dữ liệu từ một hoặc nhiều nguồn khác nhau. Kho dữ liệu lưu trữ hiện tại làm dữ liệu lịch sử và được sử dụng để tạo báo cáo xu hướng cho báo cáo quản lý cấp cao như so sánh hàng năm và hàng quý.

...

Không giống như các kho dữ liệu ETL-based, các nguồn dữ liệu tích hợp hệ thống và các kho dữ liệu tích hợp tất cả vì không có chuyển đổi dữ liệu chiều hoặc tham khảo. Dữ liệu tích hợp kiến ​​trúc kho này hỗ trợ chi tiết từ dữ liệu tổng hợp của kho dữ liệu đến dữ liệu giao dịch của hệ thống dữ liệu nguồn được tích hợp.

+0

có, đây là một nửa giải pháp - có một cơ sở dữ liệu hoàn toàn riêng biệt được thiết kế cho các truy vấn tổng hợp, xu hướng, v.v. Nhưng nửa còn lại là câu hỏi lớn hơn: làm cách nào để cập nhật dw trong khi đảm bảo tính nhất quán? – RonR

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