Здравствуйте, vdimas, Вы писали:
V>Ну, в C++ изначально маппинг прост, поэтому, выделенные ORM непопулярны.
V>Да и банальный шаблон Фасад ничего не стоит в рантайме, т.е. штрафа за абстракцию нет.
V>Что касается общения с БД — в плюсах принято вручную контроллировать ресурсы, например, самим управлять пулом соединений, самим решать, как именно посылать запросы к базе (синхронно, безблокировочно или асинхронно), как ожидать ответ и т.д. В дотнете же это всё "даётся сверху" без малейшей возможности настроить под себя. Просто тебе дан некий "наиболее общий сценарий", скажи спасибо и за это.
V>Ну и, низлежащие драйвера связи с БД дают доступ к памяти прочитанной строки БД, т.е., в отличие от дотнетных дров, нет надобности копировать эти данные, да еще в "вертикальное" представление в памяти, когда каждый столбец рекордсета представлен массивом. Прямо из поданной драйвером памяти данные непосредственно используются по чтению.
Это где это каждый столбец представлен массивом? Рекордсет традиционно представлен "массивом" строк, каждая из которых — "массив" значений.
При этом "копировать", собственно, ничего не надо. В реализации IDataRow можно делать конвертацию на лету при помощи MemoryMarshal.
V>Особенно когда речь идёт о локальных in-proc базах-хранилищах и непосредственного использования их низкоуровневого АПИ, там и вовсе эффективность на порядки выше.
Ну, вот на эту тему я последние месяцы как раз экспериментирую.
V>В последних дотнетах тоже есть возможность переписать драйверы общения с БД на похожий манер (через упомянутую сборку Unsafe), но вряд ли это сделают, бо легаси такое легаси...
Unsafe не должен быть нужен. Сильно пушка большая. Можно испортить больше, чем улучшить.
V>И да, в плюсах полно реализаций "самого общего сценария"
V>https://oatpp.io/docs/components/orm/
V>(с полутыка найдёшь еще несколько)
V>Но как-то явного лидера не выявилось, по всем перечисленным причинам.
Ну, в прошлый раз при разборе лидеров ORM в плюсах оказалось, что самые передовые из них находятся где-то на уровне JDBC, т.е. в глубоком прошлом по сравнению с Linq. С тех пор, правда, вышел новый стандарт — может кто-то и взялся напилить что-то более современное.