Nieblokujące problemy ORM


9

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.


2
Co to jest „nieblokujący ORM”? Jak wyświetlić dane przed ich otrzymaniem?
Robert Harvey

6
@RobertHarvey: pobieranie asynchroniczne w rzeczywistości brzmi całkiem nieźle. ORM będzie dostarczany z wywołaniem zwrotnym lub innym takim, aby „aktywować” po otrzymaniu danych. W przeciwnym razie ORM musi zostać podzielony na osobny wątek, aby zagwarantować responsywność interfejsu użytkownika.
Marjan Venema

@MarjanVenema, tak, chcę ORM z obsługą oddzwaniania.
Nikolay Fominyh

1
Dlaczego więc nie użyć asynchronicznych wywołań zwrotnych z ulubionym synchronicznym ORM? stackoverflow.com/q/1239035
Robert Harvey

@RobertHarvey, ponieważ synchroniczny ORM blokuje serwer asynchroniczny.
Nikolay Fominyh

Odpowiedzi:


2

Jakie problemy mogą wystąpić podczas opracowywania ORM?

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.

Czy obsługa pobierania nieblokującego radykalnie zwiększa złożoność ORM?

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.

Dlaczego jest tak mało nieblokujących ORM?

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.


Nie jestem pewien, czy odpowiedź na to pytanie może być lepsza. Dzięki.
Nikolay Fominyh

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.