@proelixir

Страница 825 из 1045
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, для нее можно сделать вторую етс как вторичный индекс

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
вычисли по этой функции значение и сделай ключем
каким образом? функция принимает два ключа и возвращает 1, 0, -1

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
каким образом? функция принимает два ключа и возвращает 1, 0, -1
Она все равно сравнивает какие-то проекции данных. Вот упихай эту проекцию в тапл, получится ключ для етс, нет?

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
я не уверен, конечно. но вроде в ets это не ерлангово решается через общую память и мутексы(на запись). поправьте, если я что-то напутал
да,похоже не эрлангово. мутексы особо не нужны, так как дерево создается один раз, в начале

сущности все время разные их может быть миллионы

заранее создать сеты невозможно

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
я должен очень быстро, опираясь на эти вот свойства товаров определить к какой группе он относится

количество полей - в реляционных таблицах - фиксировано как бы
никто не мешает создать какое-нибуть json-поле

Страница 825 из 1045