Purely functional data something
Dec. 21st, 2009 09:29 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Имхо, довольно распространенная задача. Скажем у нас есть множество структур, описывающих некую жызненную ситуацию, скажем мониторинг хостов в сети. Структура содержит имя хоста, адрес, всякие прочие фактически иммутабельные параметры плюс некое количество изменяющихся параметров мониторинга, время пинга, скорость передачи данных, количество HTTP ошибок и теде и тепе. Структуры хранятся, допустим для простоты, в хеше по имени хоста. Все отлично, софтина работает, обмеряет хосты, апдейтит табличку с записями и жизнь прекрасна. Теперь нам надо сделать запросы снаружи - типа а покажи-ка мне список хостов, отсортированных по пингу. Допустим, хостов у нас ровно один газиллион, поэтому сортировать на каждый запрос накладно.
В традиционной культуре мы строим сбалансированные деревья с указателями на структуры (а в структурах указатели на деревья) и организуем синхронное плавание.
А как в функциональной культуре решается такая задача? Pointer trickery тут какбе немного недоступна.
Вкратце: есть структура -record(host, {host_id, speed = 0}). и из нее ETS таблица из одного газиллиона записей. Надо быстро отдавать список хостов, отсортированный по speed. Можно наверное положить это в Мнезию и понадеяться на ее ORDER BY, а если без Мнезии, ручками?
В традиционной культуре мы строим сбалансированные деревья с указателями на структуры (а в структурах указатели на деревья) и организуем синхронное плавание.
А как в функциональной культуре решается такая задача? Pointer trickery тут какбе немного недоступна.
Вкратце: есть структура -record(host, {host_id, speed = 0}). и из нее ETS таблица из одного газиллиона записей. Надо быстро отдавать список хостов, отсортированный по speed. Можно наверное положить это в Мнезию и понадеяться на ее ORDER BY, а если без Мнезии, ручками?
no subject
Date: 2009-12-21 08:36 pm (UTC)no subject
Date: 2009-12-22 01:19 am (UTC)вообще, sql server (нормальный, а не компакт) может нормально жить в довольно-таки тесных помещениях - например, 100 мегабайт памяти на всё про всё. зависит от задачи, конечно. rule of thumb is - если all non-leaf index pages влезают в память, то всё в порядке. сравни с самописным решением: в памяти надо держать индексы целиком, а не только их non-leaf части.
также: обязательно ли сервер базы должен бежать на том же самом ящике? round trip через один хоп - это тоже sub-millisecond.
no subject
Date: 2009-12-22 06:21 am (UTC)no subject
Date: 2009-12-22 10:39 am (UTC)вообще, конечно, если доступаться до базы должен только один процесс с одной машины, то embedded engines лучше.
no subject
Date: 2009-12-22 11:43 am (UTC)Один процесс, да.