2012-07-06 13 views
9

Piszę aplikację internetową za pomocą PHP/Symfony2/Doctrine2 i kończę projektowanie bazy danych. Musimy importować te obiekty (np. Projekty, Dostawcy) do naszej bazy danych, które pochodzą od różnych klientów z różnymi polami. Niektórzy klienci mają 2 pola w obiekcie projektu, a niektórzy mają 20. Tak więc zastanawiałem się nad ich implementacją w MongoDB, ponieważ wydaje się, że jest to przydatne.Mieszanka MySQL i Mongodb w aplikacji

Symfony2 obsługuje zarówno ORM, jak i ODM, więc nie powinno to stanowić problemu. Teraz moje pytanie brzmi, jak zapewnić integralność danych w obu bazach danych. Ponieważ Obiekty w moim MySQL db muszą być w jakiś sposób połączone z obiektami w MongoDB w celu zachowania integralności.

Czy istnieją lepsze rozwiązania? Każda pomoc/myśli byłyby doceniane

+0

Należy pamiętać, że ktoś będzie musiał * obsługiwać * dwie różne bazy danych po zakończeniu pisania kodu (zarządzanie kopiami bezpieczeństwa, poprawkami bezpieczeństwa itp.). Nie wprowadziłbym do projektu drugiej technologii przechowywania danych tylko dlatego, że czuje się ona dobrze dopasowana, ale tylko wtedy, gdy korzyść z jej wykonania przewyższa wszystkie koszty. –

Odpowiedz

8

Bulat wdrażane rozszerzenie Doctrine gdy byliśmy w OpenSky do obsługi odniesień między dokumentami MongoDB i zapisów danych MySQL, która jest obecnie siedzi w ich (wprawdzie przestarzały) fork projektu DoctrineExtensions. Będziesz chciał spojrzeć na gałęzie: orm2odm_references lub openskyfork. Aby było to możliwe do wykorzystania w projekcie, prawdopodobnie zechcesz przenieść go do nowego widżetu DoctrineExtensions lub po prostu włączyć kod do swojej aplikacji. Niestety nie ma żadnej dokumentacji poza samym kodem.

Na szczęście istnieje również strona cookbook article na stronie Doctrine, która opisuje, jak zaimplementować to od zera. Zasadniczo polegasz na detektorze zdarzeń, który zastąpi twoją własność odwołaniem (tzn. Niezainicjowanym obiektem Proxy) z innego menedżera obiektów, a naturalne zachowanie obiektów Proxy, które leniwie się ładują, zajmuje się resztą. Pod warunkiem, że detektor zdarzeń jest usługą, możesz z łatwością wprowadzić do niego oba menedżery obiektów ORM i ODM.

Jedyną integralnością gwarantowaną przez ten model jest to, że otrzymasz wyjątki podczas próby nawodnienia złego odniesienia, co prawdopodobnie jest większe niż w przypadku zwykłego przechowywania ID innej bazy danych i ręcznego wysyłania zapytań.

+2

Ten blog opisuje sposób implementacji: http://jwage.com/2010/08/25/blending-the-doctrine-orm-and-mongodb-odm/ Dzięki! –

+0

To właściwie ta sama treść co artykuł z książki kucharskiej, który łączyłem. Jon Wage zobowiązał się do dokumentacji po napisaniu artykułu na blogu :) – jmikola

+0

Yeap zauważyłem :) –

4

W ten sposób rozwiązaliśmy ten problem, przenosząc się do Postgres. Postgres ma typ danych o nazwie hstore, który działa jak kolumna NoSQL. Działa całkiem słodki

UPDATE

Teraz, kiedy patrzę wstecz, idź z jsonb zamiast json lub hstore gdyż pozwala mieć więcej niż struktury danych sklepu klucz-wartość.

Powiązane problemy