
Evgeny
13.12.2017
13:45:44
дык на вершине дерева все равно будет один процесс

Ilja
13.12.2017
13:45:46
Так наверно надо сначала сбалансировать.

Evgeny
13.12.2017
13:46:19
все запросы будут через него течь

Anatoliy Kovalchuk
13.12.2017
13:46:43
если данные не мутабельные можно попробовать сгенерировать модули на основе данных, и тогда они будут доступны сразу для всех процессов

Google

Ilja
13.12.2017
13:46:48
Роутеров может быть несколько с балансировкой между ними рандомным выбором из списка. Но это даже будет неактуально, поскольку процесс роутинга должен быть очень быстрым, значительно быстрее, чем поиск в поддереве.

Alex
13.12.2017
13:46:52
если дерево большое да и еще балансироваться будет то в отдельный С процесс его и через порт

Evgeny
13.12.2017
13:47:00
вот короче https://github.com/SenecaSystems/red_black_tree
Короче забью наверное пока на это дело, пусть сидит в одном процессе
в целом поиск должен быть очень быстрым, даже на эликсире

Alexey
13.12.2017
13:48:43
и долгой вставка, как я понял

Evgeny
13.12.2017
13:48:43
количество элементов в районе сотни тысяч

Alexey
13.12.2017
13:48:54
потому что после каждой будет перебалансировка

Evgeny
13.12.2017
13:48:56
вставка в бинарное дерево тоже быстрая
перебалансировка достаточно дешева для красно-черного дерева

Alexey
13.12.2017
13:49:35
а вопрос то , собственно, в чем?

Evgeny
13.12.2017
13:49:38
кроме того оно строится один раз

Alexey
13.12.2017
13:49:41
в параллельной обработке?

Google

Evgeny
13.12.2017
13:49:45
да

Alex
13.12.2017
13:49:48
так вот же
tree = RedBlackTree.new([1 => :bubbles])
эту хрень 'tree' не пробовал в еts засунуть?

Alexey
13.12.2017
13:49:54
вставки или поиска

Evgeny
13.12.2017
13:49:58
зачем?

Ilja
13.12.2017
13:50:00
Сделать сбалансированное дерево лучше на мутабельной структуре. А потом (через порт) принять уже готовое дерево и распилить его между процессами для распараллеливания поиска.

Alex
13.12.2017
13:50:04
Да на кой черт тебе конкретное дерево, положи данные в ets и все. Там есть seq scan, для нее можно сделать вторую етс как вторичный индекс

Alexey
13.12.2017
13:50:29

Evgeny
13.12.2017
13:50:54
как потом доставать? если элементы слишком сложные
ключи точнее
кроме того данные в бинарном дереве отсортированы по ключу

Alex
13.12.2017
13:51:39
Дерево нельзя нарезать между процессами, потому что его надо перебалансировать.

Alexey
13.12.2017
13:51:44
как? ведь ключи очень сложные

Evgeny
13.12.2017
13:51:58
операция сравнения ключей есть
нет операции построения хеша и равенства

Alexey
13.12.2017
13:52:13
которую ты в виде функции передать должен?

Evgeny
13.12.2017
13:52:19
да
в той реализации RB-дерева можно такую функцию дать

Alexey
13.12.2017
13:52:50
вычисли по этой функции значение и сделай ключем

Evgeny
13.12.2017
13:53:00

Alex
13.12.2017
13:53:33
Да забей вообще. Положи в ордсет, который индекс, результаты функции ключа и все

Google

Evgeny
13.12.2017
13:53:41

Alexey
13.12.2017
13:54:38
да. действительно. ведь сеты есть

Evgeny
13.12.2017
13:54:49
что это?
типа сортированный массив?

Alexey
13.12.2017
13:55:01
если ключей несколько - так и делаешь ключ - рекорд таблицу

Alex
13.12.2017
13:55:13

Alexey
13.12.2017
13:55:25
искать по нескольким ключам - потом делаешь пересечение сетов и резалт вам пожалуйста

Evgeny
13.12.2017
13:55:37
искать по нескольким ключам не нужно

Alexey
13.12.2017
13:55:41
даже несколько может быть
ну как же ключ то сложный

Evgeny
13.12.2017
13:56:08

Evgeny
13.12.2017
13:57:40
ключи могут быть бинарно разными, а логически считаются одинаковыми

Alexey
13.12.2017
13:57:50
ну. построй дерево из списка списков. или мапы в мапах

Evgeny
13.12.2017
13:58:33
как построить дерево я и сам знаю, проблема только в совместном доступе
походу в эрланге это невозможно
и в эликсире соответственнл

Alexey
13.12.2017
13:58:57
да. невозможно

Evgeny
13.12.2017
13:59:45
я походу занимаюсь преждевременной оптимизацией
операция сравнения недешевая, но с другой стороны сто тысяч элементов не так уж и много

Google

Alexey
13.12.2017
14:00:54
а по какому принципу идет поиск в таком дереве? по какому ключу?
ну вот допустим, по некоей функции ты построил дерево
по той же функции и ключ обработал и в дерево пошел?

Evgeny
13.12.2017
14:01:27
тебя интересует как работает бинарное дерево?

Alexey
13.12.2017
14:01:56
на пальцах

Evgeny
13.12.2017
14:02:33
для работы бинарного дерева достаточно определить функцию которая может точно сказат меньше ли один ключ, чем другой
при вставке, вставляемый ключ сравнивается с уже вставленными ключами
таким образом находится место для него, туда и втсавляется, потом балансируется
также происходит и поиск

Alexey
13.12.2017
14:04:17
ну там направлений получается два

Admin
ERROR: S client not available

Evgeny
13.12.2017
14:04:19
в случае же ets для каждого ключа вычисляется хеш

Alexey
13.12.2017
14:04:38
а такое вот если. это не оно?
http://erlang.org/doc/man/gb_trees.html

Evgeny
13.12.2017
14:05:40
такое тоже подойдет, но это не решает проблему параллельного доступа

Alexey
13.12.2017
14:06:00
на чтение?

Evgeny
13.12.2017
14:06:03
да
либо забить на параллельность, либо пилить некое расширение

Alex
13.12.2017
14:06:43

Evgeny
13.12.2017
14:06:54
точно не могу

Alex
13.12.2017
14:07:01
печально быть тобой

Google

Evgeny
13.12.2017
14:07:12
да, задача извратная
можно перевразироват
есть скажем сто тысяч признаков

Alexey
13.12.2017
14:07:56
я не уверен, конечно. но вроде в ets это не ерлангово решается через общую память и мутексы(на запись). поправьте, если я что-то напутал

Evgeny
13.12.2017
14:08:38
и есть тучи сущностей, нужно очень быстро определять какой из признаков соответствует этим сущностям
что-то вроде определеня к какой группе относится товар

Alexey
13.12.2017
14:10:04
ну так и делается признак1 - сущности1, признак2 - сущности2. потом сущности1 и сущности2 - это сеты. делаешь их пересечение и получаешь результат

Evgeny
13.12.2017
14:10:11
сущности все время разные их может быть миллионы
заранее создать сеты невозможно

Alexey
13.12.2017
14:11:05
а как тебе дерево поможет найти одну сущность? их же может получиться несколько

Evgeny
13.12.2017
14:11:31
мне нужно искать не сущности, а признаки

Alexey
13.12.2017
14:11:40
мутная какая-то задача у тебя

Evgeny
13.12.2017
14:12:08
да, задача нетривиальная
давай перефразирую
есть товары

Alexey
13.12.2017
14:12:24
придется тебе идти в SQL

Evgeny
13.12.2017
14:12:54
у товаров куча полей, которые могут быть в разных комбинациях

Alexey
13.12.2017
14:13:12
это вот не правильно даже с точки зрения SQL )))
количество полей - в реляционных таблицах - фиксировано как бы

Evgeny
13.12.2017
14:13:41
я должен очень быстро, опираясь на эти вот свойства товаров определить к какой группе он относится