Я задал вопрос о SO и обнаружил, что для моей любимой веб-платформы нет неблокирующих ORM. Под неблокированием я подразумеваю ORM с поддержкой обратного вызова для асинхронного поиска. ORM должен быть снабжен обратным вызовом или чем-то подобным для выполнения при получении данных.
Я хочу создать его, но у меня есть несколько вопросов, которые мешают мне начать разработку:
- Какие проблемы могут возникнуть при разработке ORM?
- Значительно ли поддерживает неблокируемый поиск сложность ORM?
- Почему вокруг так мало неблокирующих ОРМ?
Обновление: похоже, я должен улучшить свой вопрос. У нас есть решения, которые уже позволяют нам получать данные неблокирующим способом, и я считаю, что большинство компаний, использующих такие решения, используют сырой SQL. Мы хотим создать более общее решение, которое мы можем использовать в будущих проектах. С какими трудностями мы можем столкнуться?
Обновление 2: Предпочитаемый язык - Python, но меня интересуют принципы. Этот вопрос на самом деле для меня, так как я буду смотреть на платформы, которые уже имеют неблокирующую ORM.
источник
Ответы:
Вам нужно будет обратиться к перечню проблем, необходимых для преодоления несоответствия реляционного импеданса объектов , а также к особенностям SQL, предоставляемым каждым поставщиком СУБД. Чем более продвинуты ваши требования, тем хуже будут ваши проблемы в этом отделе: например, SQL, который вы генерируете для реализации подкачки результатов, будет довольно сильно отличаться для Oracle, SQL Server и mysql. К счастью, это не отличается между блокирующими и неблокирующими реализациями ORM, поэтому, если есть ORM с открытым исходным кодом для Python, вы сможете использовать его для решения почти всех этих проблем.
Самая большая проблема, с которой вы столкнетесь, заключается в том, что библиотека соединений для доступа к самой СУБД будет блокироваться. Это еще одно отличие, которое вы должны устранить. Управление потоками, невидимыми для ваших пользователей, станет дополнительной проблемой для вас. Кроме того, загрузка зависимостей по требованию была бы проблемой, потому что пользователи воспринимают эту операцию как синхронную: в конце концов, они обычно не ожидают уведомления о том, когда можно получить доступ к свойству коллекции своего объекта.
Я могу только размышлять об этом последнем пункте, но я думаю, что это связано с низким спросом на такие платформы: поскольку вы можете частично моделировать неблокирующую ORM, добавляя другой уровень потоков в код приложения по мере необходимости, и сохраняя регулярную блокировку В любом случае, разработка специализированной структуры для этого представляется неоптимальной.
источник
Вы не сказали, какой язык используете, поэтому я порекомендую Node.js и ORM для него: Node ORM , все в узле асинхронно, это ничем не отличается.
источник