ufm: (Default)
[personal profile] ufm

Ну ответ на это очень простой – это древовидное представление 192.168.2.1. То, что это дерево, угадал Тоботрас – на то он и великий. А уж то, что кому-то не лень будет ветки считать я и не расчитываю. :)

Я тут просто классический велосипед реализовываю  – попадание адреса в список масок (да-да, стандартная задача: локальное/мир/всё остальное).

Originally published at U.F.M's Homepage. You can comment here or there.

(no subject)

Date: 2010-10-21 11:32 (UTC)
From: [identity profile] sfy-y.livejournal.com
Не, ты гонишь. Тоботрас не просто великий, он ЛЕГЕНДАРНЫЙ!

То, что это дерево, было очевидно всем, кмк. Кстати, что-то мне подсказывает (лень разбираться подробнее), что ты не учел, что маски не бывают дырявыми. Они всегда /хх.

(no subject)

Date: 2010-10-21 11:36 (UTC)
From: [identity profile] ufm.livejournal.com
Про маски я как-бы в курсе. :)

(no subject)

Date: 2010-10-21 11:42 (UTC)
From: [identity profile] sfy-y.livejournal.com
А зачем справа столько скобок было? Задача-то этого не требует. (или я гоню?)

(no subject)

Date: 2010-10-21 11:54 (UTC)
From: [identity profile] ufm.livejournal.com
Юр, это дерево. Ветки закрывались.
0.0.0.0/32
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[nil,nil],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]],[]]

(no subject)

Date: 2010-10-21 12:28 (UTC)
From: [identity profile] sfy-y.livejournal.com
Я другого не понимаю, чем стандартное решение не устроило. Храни роуты в виде адрес+/хх, проверить просто (роут.xor.адрес>>хх==0). Роуты хранить можно и в дереве, вычислительная сложность логарифмическая.

Просто с функциональным программированием поиграть?

(no subject)

Date: 2010-10-21 12:40 (UTC)
From: [identity profile] ufm.livejournal.com
1. Наверное из-за того, что моё решение имеет фиксированную скорость? в худшем случае - 23 проверки по дереву для любого адреса при любом количестве масок (если считать что минимальная маска - /24).

2. Юра, я пишу на ерланге.

(no subject)

Date: 2010-10-21 13:33 (UTC)
From: [identity profile] sfy-y.livejournal.com
1. При бесконечном количестве процессоров. ;)

2. Ужас. %)

(no subject)

Date: 2010-10-21 13:34 (UTC)
From: [identity profile] ufm.livejournal.com
С чего-бы? Память - да, жрётся. Не смертельно - но есть. А проц то тут при чём?

(no subject)

Date: 2010-10-21 14:21 (UTC)
From: [identity profile] sfy-y.livejournal.com
Феда, ты прикалываешься? Эрланг славен параллелизмом. В данном случае ты запускаешь подпроцессы по числу роутов. На бесконечном количестве процессоров и heapsort за логарифмическое время работает, а не за N*log(N), как на одном.

(no subject)

Date: 2010-10-21 15:03 (UTC)
From: [identity profile] ufm.livejournal.com
Юра, ты прикалываешься? Я не запускаю по процессу на каждый роут - в данном случае это дурная идея.

Я храню всю таблицу масок в виде дерева и одним процессом получаю попадает ли адрес в этот список масок или нет. И вычисление попадает адрес или нет происходит максимум за 23 выборки из дерева. Для любого числа масок в списке.

Еще раз - у меня нет не то что бы логарифмической зависимости времени проверки от размера таблицы масок, у меня нет даже линейной.

(no subject)

Date: 2010-10-21 16:05 (UTC)
From: [identity profile] sfy-y.livejournal.com
Не, ты точно прикалываешься...

1. Процессы запускает эрланг, не ты вручную, конечно. http://ru.wikipedia.org/wiki/Erlang#.D0.A0.D0.B0.D0.B1.D0.BE.D1.82.D0.B0_.D1.81_.D0.BF.D1.80.D0.BE.D1.86.D0.B5.D1.81.D1.81.D0.B0.D0.BC.D0.B8

2. Чудес не бывает, если тебе надо работать с 50000 роутов, то построить дерево стоит не менее N*log(N), а поиск по нему - log(N). И от инструмента это никак не зависит (функциональный и процедурный языки функционально эквивалентны).

3. Логарифмическая зависимость намного лучше линейной, двоичный логарифм тысячи - около 10, а не тысяча.

(no subject)

Date: 2010-10-21 16:15 (UTC)
From: [identity profile] ufm.livejournal.com
Нет, прикалываешься ты.

1. Ты мне присылаешь сылку на википедию на язык, на котором я пишу уже достаточно давно, т.е. как-бы всё таки знаю что там и как.

2. Время построения дерева меня не интересует, оно обновляется раз в час.

3. Да пох.

Юр, тебе какой раз сказать, что сравнение адреса с маской у меня занимает максимум 23 выборки из дерева вне зависимости размера этого дерева? Ну, т.е., ты можешь меня попытатся поубеждать, но я боюсь у тебя херово получится - у меня как-бы исходники перед глазами.

(no subject)

Date: 2010-10-21 16:33 (UTC)
From: [identity profile] sfy-y.livejournal.com
А как иначе? Думаешь, на С было бы больше? Тебе этот цикл до до 24 с одним ифом внутри на ветвление показать?

(no subject)

Date: 2010-10-21 16:47 (UTC)
From: [identity profile] ufm.livejournal.com
*facepalm*
Юр, о чем мы спорим?

(no subject)

Date: 2010-10-21 16:51 (UTC)
From: [identity profile] sfy-y.livejournal.com
А я откуда знаю?

Я просто прикалываюсь, зачем выбирать такой экзотический инструмент для такой задачи. :) Если б ты ESB на кластере городил - другое дело.

(no subject)

Date: 2010-10-21 16:54 (UTC)
From: [identity profile] ufm.livejournal.com
Потому-что ерланг очень хорошо заточен для решения подобных задач. В том числе - потому что очень хорошо паралелится.

(no subject)

Date: 2010-10-21 16:37 (UTC)
From: [identity profile] sfy-y.livejournal.com
По 1-2-3

1. Эту фишку ты не заценил, похоже. Эрланг приколен именно тем, что он делает параллелизм без мутексов и семафоров, причем без помощи операционки.

2. Как знаешь, от этого трудоемкость не меняется.

3. Не, логарифм лучше. :-P

(no subject)

Date: 2010-10-21 16:53 (UTC)
From: [identity profile] ufm.livejournal.com
1. Юр, эту фишку я заценил, поверь мне. В данном случае использовать по процессу на маску смысла нет - вот просто нет. Если тебя это удовлетворит - стартует по процессу на каждый полученный udp-шный netflow пакет.

2. Трудоёмкость построения дерева, кстати, - теже самые максимальные 24 выборки на маску. Но еще раз - дерево масок строится раз в час. Очень быстро строится. Очень. Ну т.е. получение из интенета файла со списком масок занимает на не один десятичный порядок больше времени.

3. Нет. Потому что мой вариант имеет фиксированное и предсказуемое время работы, не зависящее от размеров дерева (т.е. не зависяще еот количества масок).

(no subject)

Date: 2010-10-21 17:32 (UTC)
From: [identity profile] sfy-y.livejournal.com
1. Это от тебя не зависит. ;)

2. OMG. N*Log(N) или N*24, как больше нравится. N - количество роутов.

3. При построенном дереве цикл на 24 итерации на С не напишешь? Не верю. А дерево строится обычной сортировкой.

(no subject)

Date: 2010-10-21 17:44 (UTC)
From: [identity profile] ufm.livejournal.com
Юр, надоело. Иди еще вики про ерланг почитай, может еще чего грандиозного прочитаешь, не только про то, что он у тебя самопроизвольно процессы запускает.

(no subject)

Date: 2010-10-21 17:55 (UTC)
From: [identity profile] sfy-y.livejournal.com
Фед, я не сегодня про эрланг прочитал. Не веришь мне, поверишь им, м.б.:
http://rsdn.ru/article/erlang/GettingStartedWithErlang.xml