Zadałem pytanie dotyczące SO i okazało się, że nie ma żadnych nieblokujących ORM dla mojej ulubionej struktury sieciowej. Przez nieblokowanie rozumiem ORM z obsługą oddzwaniania dla pobierania asynchronicznego. ORM zostanie dostarczony z wywołaniem zwrotnym lub innym takim, które zostanie wykonane po otrzymaniu danych.
Chcę je utworzyć, ale mam kilka pytań, które blokują mi rozpoczęcie tworzenia:
- Jakie problemy mogą wystąpić podczas opracowywania ORM?
- Czy obsługa pobierania nieblokującego radykalnie zwiększa złożoność ORM?
- Dlaczego jest tak mało nieblokujących ORM?
Aktualizacja: Wygląda na to, że muszę poprawić swoje pytanie. Mamy rozwiązania, które już pozwalają nam odbierać dane w sposób nieblokujący i uważam, że większość firm, które używają takich rozwiązań, używa surowego SQL. Chcemy stworzyć bardziej ogólne rozwiązanie, które możemy ponownie wykorzystać w przyszłych projektach. Jakie trudności możemy napotkać?
Aktualizacja 2: Preferowanym językiem jest python, ale interesują mnie zasady. To pytanie jest właściwie dla mnie, ponieważ przyjrzę się platformom, które mają już nieblokujący ORM.
źródło
Odpowiedzi:
Będziesz musiał zająć się listą prania problemów wymaganych do pokonania niedopasowania obiektowej impedancji relacyjnej , a także radzić sobie z osobliwościami SQL dostarczanymi przez każdego dostawcę RDBMS. Im bardziej zaawansowane będą twoje wymagania, tym większe będą twoje problemy w tym dziale: na przykład SQL generowany w celu zaimplementowania stronicowania wyników będzie się znacznie różnić między Oracle, SQL Server i mysql. Na szczęście nie różni się to między blokującymi i nieblokującymi implementacjami ORM, więc jeśli istnieje Pythona o otwartym kodzie źródłowym, będziesz w stanie mocno pożyczyć od niego, aby rozwiązać prawie wszystkie te problemy.
Największym problemem, z którym się zmierzysz, jest to, że biblioteka połączeń umożliwiająca dostęp do samego RDBMS byłaby blokowana. To kolejna różnica, którą należy rozwiązać. Zarządzanie wątkami niewidocznymi dla użytkowników będzie dla Ciebie dodatkowym wyzwaniem. Ponadto ładowanie zależności na żądanie byłoby wyzwaniem, ponieważ użytkownicy postrzegają tę operację jako synchroniczną: w końcu zwykle nie oczekują powiadomienia o tym, kiedy można uzyskać dostęp do właściwości kolekcji ich obiektu.
Mogę tylko spekulować na ten ostatni punkt, ale myślę, że ma to związek z niskim popytem na takie frameworki: ponieważ można częściowo symulować nieblokującą ORM, dodając w razie potrzeby kolejny poziom wątków do kodu aplikacji i utrzymując regularne blokowanie nigdzie indziej, opracowanie specjalistycznych ram dla tego wydawałoby się nieoptymalne.
źródło
Nie powiedziałeś, jakiego języka używasz, więc polecę Node.js i ORM: Node ORM , wszystko w węźle jest asynchroniczne, to nie jest inaczej.
źródło