data structures baking (программистское)

Feb 11, 2013 14:28

Господа, а существуют ли библиотеки для data baking в C/С++? (уточнение, возможно, излишнее, т.к. я не знаю других языков, в которых data baking в принципе возможен) Поскольку без reflection'а тут никак не обойтись, видимо, это должно быть что-нибудь кодогенерирующее, в духе protobuf. Может быть, даже extension для protobuf'а.

Я точно знаю, что aruslanRead more... )

soft, gamedev

Leave a comment

Comments 48

wizzard0 February 11 2013, 10:32:50 UTC
потому что все остальные хранят данные не в памяти обрабатывающего процесса, а в БД?

Reply

plakhov February 11 2013, 10:34:23 UTC
Это неверное утверждение afaik. Ну и потом, БД тоже кто-то ведь пишет.

Reply

wizzard0 February 11 2013, 10:36:18 UTC
ну я знаю в .NET места, где есть data baking, но он там аккуратно так под капот упрятан, выполняется компилятором, и про него ряд людей даже и не знают :)

а так навскидку было бы круто примеров

Reply

plakhov February 11 2013, 10:54:26 UTC
У меня, возможно, профдеформация, т.к. весь поиск так устроен: сначала мы долго в оффлайне что-то считаем, а потом отрабатываем запросы из readonly структур. Ну и вообще, когда к сервису серверу приходит ~5000 RPS (к сервису больше, конечно), довольно сложно в БД на каждый чих ходить.

Reply


max630 February 11 2013, 12:01:00 UTC
Это в смысле в статические константы преобразовывать?

Reply

plakhov February 11 2013, 12:46:06 UTC
Нет, в смысле, что загрузка данных на старте выглядит так: mmap'им кусок данных с диска в память, и либо на этом и всё, либо ещё однократно проходимся по нему и исправляем "смещения" на честные указатели.

Reply

kray_zemli February 11 2013, 13:50:38 UTC
Кажется, вы описали процедуру загрузки exe-файла в память. В котором никто не запрещает иметь не только код, но и инициализированные данные.

Reply

wizzard0 February 11 2013, 12:48:23 UTC
в структуры данных, которые готовы к работе после mmap а не парсинга xml/json.

Reply


_winnie February 11 2013, 12:10:01 UTC
Видимо, очень мало сервисов поднимают самостоятельно гигабайты на старте.

В базах данных/прочих хранилищах - там уже всё забейкано. А сервис ходит в такое отдельно запущенное хранилище.

Reply

jakobz February 12 2013, 09:36:50 UTC
Да просто в энтерпрайзе все языки с GC и все из себя безопасные. А тут предлагается непонятно что непонятно откуда загрузить и поверить на слово что там все правильно разложено. Короче и ссыкотно, и кейс редкий, и нужно на уровне рантайма это приделывать, и гарантировать что рантайм детерминировано все там раскладывает и выравнивает.

Короче геморой перевешивает вероятные плюшки.

В энтерпрайзе больше нужна быстрая сериализация с хорошими гарантиями не уронить всю систему. Собственно ее и используют для бейкинга если он требуется.

Reply


justy_tylor February 11 2013, 12:57:12 UTC
Тоже крутил (произносится в тональности собрания анонимной алкоты в каком-либо штатовском фильме).

Бейкинг рулит, когда продукт один, и версия типов/схемы в нём на данный момент одна. Делается с учётом особенностей низлежащего железа. В замкнутых экосистемах СУБД и (особливо консольном) геймдеве. В остальных случаях компактные бинарные контейнеры сильно удобнее, и не сильно дороже.

Сделать более качественный аналог protobuf можно. Сделать универсальный бейкинг нельзя - низкоуровневые требования у каждого продукта свои. С другой стороны, даже замена XML-помойки на protobuf может значительно ускорить инициализацию и работу сервиса.

Reply

plakhov February 11 2013, 12:59:46 UTC
Я не уверен. До protobuf я неоднократно слышал мнение, что универсальная сериализация в С++ (а ещё и кроссплатформенная, а ещё и кроссязыковая), конечно же, невозможны. Да и сам был в этом уверен. Ну, она невозможна, да. А protobuf, тем не менее, есть и пользу приносит, потому что правильным образом "неуниверсальный".

Reply

justy_tylor February 11 2013, 13:30:30 UTC
Таки protobuf является обрезаным аналогом телекомовского ASN.1 DER (PER) двадцатилетней давности. Помимо этого, кодогенерация клиентов была и есть у инженерной связки EXPRESS/.stp (обмен данными через различные AP ISO 10303 между САПРами).

Правильная "неуниверсальность" у них в том, что протокол не следует системе типов какого-либо из клиентских языков, не ставит задачей воплощение всех её фишек. Правильной же универсальности (в плане поддержки sum types, единиц измерения, etc) пока недостаточно, но работа в этом направлении ведётся, в том числе мной.

Для бейкинга всё наоборот, подстройка под язык, платформу, особенности менеждмента памяти, особенности тайминга HDD/SSD, etc. Из общего здесь могут быть только библиотечки reflections/кодогенерации.

Reply

vitus_wagner February 11 2013, 13:49:03 UTC
Люди, которые высказывали это мнение, вероятно, не были в курсе, что на свете существует ASN.1 со всякими BER, CER и DER. Cудя по всему, в гугле нашелся человек, который был в курсе, что это такое. После чего оттуда выкинули ненужную мишуру вроде OID-ов и не-UTF-8 строк и получился protobuf.

Reply


(The comment has been removed)

wizzard0 February 11 2013, 21:06:59 UTC
Имхо считается

Reply


Leave a comment

Up