kika: (Default)
kika ([personal profile] kika) wrote2009-12-21 09:29 am
Entry tags:

Purely functional data something

Имхо, довольно распространенная задача. Скажем у нас есть множество структур, описывающих некую жызненную ситуацию, скажем мониторинг хостов в сети. Структура содержит имя хоста, адрес, всякие прочие фактически иммутабельные параметры плюс некое количество изменяющихся параметров мониторинга, время пинга, скорость передачи данных, количество HTTP ошибок и теде и тепе. Структуры хранятся, допустим для простоты, в хеше по имени хоста. Все отлично, софтина работает, обмеряет хосты, апдейтит табличку с записями и жизнь прекрасна. Теперь нам надо сделать запросы снаружи - типа а покажи-ка мне список хостов, отсортированных по пингу. Допустим, хостов у нас ровно один газиллион, поэтому сортировать на каждый запрос накладно.
В традиционной культуре мы строим сбалансированные деревья с указателями на структуры (а в структурах указатели на деревья) и организуем синхронное плавание.
А как в функциональной культуре решается такая задача? Pointer trickery тут какбе немного недоступна.

Вкратце: есть структура -record(host, {host_id, speed = 0}). и из нее ETS таблица из одного газиллиона записей. Надо быстро отдавать список хостов, отсортированный по speed. Можно наверное положить это в Мнезию и понадеяться на ее ORDER BY, а если без Мнезии, ручками?

[identity profile] 109.livejournal.com 2009-12-22 10:39 am (UTC)(link)
а чем sqlite такой волшебный?

вообще, конечно, если доступаться до базы должен только один процесс с одной машины, то embedded engines лучше.

[identity profile] kika.livejournal.com 2009-12-22 11:43 am (UTC)(link)
скулайт очень маленький и для своих размеров достаточно быстр, если не требовать от него слишком многого.
Один процесс, да.