2012-07-06 31 views
9

Tôi đang viết một ứng dụng web bằng cách sử dụng PHP/Symfony2/Doctrine2 và chỉ hoàn thành thiết kế của Cơ sở dữ liệu. Chúng tôi phải nhập các đối tượng này (ví dụ: Dự án, Nhà cung cấp) vào cơ sở dữ liệu của chúng tôi đến từ các khách hàng khác nhau với nhiều lĩnh vực. Một số khách hàng có 2 trường trong đối tượng dự án và một số có 20. Vì vậy, tôi đã suy nghĩ về việc triển khai chúng trong MongoDB vì nó có vẻ như là một cách sử dụng tốt cho nó.Kết hợp MySQL và Mongodb trong một ứng dụng

Symfony2 hỗ trợ cả ORM và ODM để không phải là vấn đề, Bây giờ câu hỏi của tôi là làm thế nào để đảm bảo tính toàn vẹn của dữ liệu trong cả hai cơ sở dữ liệu. Bởi vì Các đối tượng trong MySQL db của tôi cần phải được liên kết với các đối tượng trong MongoDB đối với các vấn đề về tính toàn vẹn.

Có giải pháp nào tốt hơn không? Bất kỳ sự giúp đỡ/suy nghĩ sẽ được đánh giá

+0

Hãy nhớ rằng ai đó sẽ phải * vận hành * hai cơ sở dữ liệu khác nhau sau khi bạn đã viết xong mã (quản lý sao lưu, bản vá bảo mật, v.v.). Tôi sẽ không giới thiệu một công nghệ lưu trữ dữ liệu thứ hai cho một dự án chỉ vì nó cảm thấy như một sự phù hợp tốt, nhưng chỉ khi lợi ích của việc làm như vậy outweighs tất cả các chi phí. –

Trả lời

8

Bulat thực hiện một phần mở rộng học thuyết trong khi chúng tôi đang ở OpenSky để xử lý tài liệu tham khảo giữa các tài liệu MongoDB và hồ sơ MySQL, hiện đang ngồi trong họ (phải thừa nhận là lỗi thời) fork của dự án DoctrineExtensions. Bạn sẽ muốn xem các chi nhánh orm2odm_references hoặc openskyfork. Để điều này có thể sử dụng được trong dự án của bạn, có thể bạn sẽ muốn chuyển nó sang một nhánh mới của DoctrineExtensions, hoặc đơn giản là kết hợp mã vào ứng dụng của bạn. Thật không may, không có tài liệu nào ngoài chính mã đó.

Rất may, cũng có cookbook article trên trang web của Giáo lý mô tả cách triển khai điều này từ đầu. Về cơ bản, bạn dựa vào trình lắng nghe sự kiện để thay thế thuộc tính của mình bằng tham chiếu (tức là đối tượng Proxy chưa được khởi tạo) từ trình quản lý đối tượng khác và hành vi tự nhiên của các đối tượng Proxy để tải xuống một cách tự nhiên sẽ xử lý phần còn lại. Cung cấp trình nghe sự kiện là một dịch vụ, bạn có thể dễ dàng tiêm cả hai trình quản lý đối tượng ORM và ODM vào nó.

Tính toàn vẹn duy nhất được đảm bảo bởi mô hình này là bạn sẽ nhận được ngoại lệ khi cố gắng tìm hiểu một tham chiếu không tốt, có thể nhiều hơn bạn chỉ cần lưu trữ ID của cơ sở dữ liệu khác và truy vấn theo cách thủ công.

+2

Blog này thực sự mô tả cách nó được triển khai: http://jwage.com/2010/08/25/blending-the-doctrine-orm-and-mongodb-odm/ Cảm ơn! –

+0

Đó thực sự là nội dung giống như bài viết về sách dạy nấu ăn tôi đã liên kết. Jon Wage cam kết với tài liệu sau khi viết bài viết trên blog :) – jmikola

+0

Yeap Tôi nhận thấy :) –

4

Cách chúng tôi giải quyết vấn đề này là bằng cách chuyển sang Postgres. Postgres có một kiểu dữ liệu được gọi là hstore hoạt động giống như cột NoSQL. Hoạt động khá ngọt

CẬP NHẬT

Bây giờ tôi đang nhìn lại, đi với jsonb thay vì json hay hstore vì nó cho phép bạn có nhiều hơn một cấu trúc dữ liệu hơn là một cửa hàng giá trị khóa.

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