Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оптимизация алгоритма или как юзать постгрис
|
|||
|---|---|---|---|
|
#18+
Привет всем! Есть задача, которая на данный момент реализована на MySQL. имеем таблицу tarif_zone_defs вида (CIDR, tarif_zone) в которой прописываемсто-то типа: (62.64.0.0/18, Украина) (212.0.0.5/32, Вася_Пупкин_продающий_свои_фильмы) иимеем таблицу, в которую сваливаем netflow статистику, а именно: (srcIP, dstIP, bytes). исходя из поставленной задачи тарификации трафика (по направлениям и по зонам) был написан триггер, который, собсно, при вставке записи в таблицу netflow определял зоны, направления, стоимость и т.д. Цена такого триггера в текущей реализации - 14 селектов из порядка 20-ти таблиц, и 5 или 6 апдейтов (реализация временнЫх регистров или периодических данных). это предыстория, а теперь собственно вопрос. очень хотца конструкцию вида SELECT * FROM tarif_zone_defs tz WHERE @srcIP << CIDR; SELECT * FROM tarif_zone_defs tz WHERE @dstIP << CIDR; заменить на один запрос к одной таблице, но! конструкция вида CREATE VIEW tarif_zone_concats AS SELECT st.CIDR, st.tarif_zone, dt.CIDR, dt.tarif_zone FROM tarif_zone_defs st, tarif_zone_defs dt; с последующим поиском по представлению жутко тормозит хоть с индексами, хоть без таковых. примерно одинаково. подскажите, плз, какие могут быть варианты реализации. как пример объемов - сейчас в таблице netflow порядка миллиарда записей, и каждые 5 минут туда сваливается около 5-20 тыс записей... соотвецтвенно каждую надо тарифицировать и здесь дорога каждая наносекунда. -- Каждую секунду с поверхности жидкости в незакупоренной бутылке водки испаряется семь мономолекулярных слоев спирта! (с) народный фольклор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 21:42 |
|
||
|
Оптимизация алгоритма или как юзать постгрис
|
|||
|---|---|---|---|
|
#18+
Сложно что либо понять.. автор SELECT * FROM tarif_zone_defs tz WHERE @srcIP << CIDR; SELECT * FROM tarif_zone_defs tz WHERE @dstIP << CIDR; Чем отличаются эти два запроса? под netflow есть свои базы, которые оптимизированны под такие задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 13:59 |
|
||
|
Оптимизация алгоритма или как юзать постгрис
|
|||
|---|---|---|---|
|
#18+
Алексей КлючниковСложно что либо понять.. сголасен, слишком абстрактоно описал задачу.вчера писал вечером, задолбаный... Алексей Ключников автор SELECT * FROM tarif_zone_defs tz WHERE @srcIP << CIDR; SELECT * FROM tarif_zone_defs tz WHERE @dstIP << CIDR; Чем отличаются эти два запроса? тем, что первый ищет соответствие по адресу источника, а второй - назначения, соответственно. Алексей Ключников под netflow есть свои базы, которые оптимизированны под такие задачи. подскажите, плз, что это за базы... я таких не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 15:13 |
|
||
|
Оптимизация алгоритма или как юзать постгрис
|
|||
|---|---|---|---|
|
#18+
f@t@list SELECT * FROM tarif_zone_defs tz WHERE @srcIP << CIDR; SELECT * FROM tarif_zone_defs tz WHERE @dstIP << CIDR; CREATE VIEW tarif_zone_concats AS SELECT st.CIDR, st.tarif_zone, dt.CIDR, dt.tarif_zone FROM tarif_zone_defs st, tarif_zone_defs dt; Странное какото у вас представление. Ни совсем понятно чего вы в нем хотели обеденить... Насколько я понимаю, вам просто нужно проверить, входит ли срц ИП ИЛИ дст ИП в сетку (т.е. в соответствующую зону)? Тогда надо просто сделать Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2006, 22:30 |
|
||
|
Оптимизация алгоритма или как юзать постгрис
|
|||
|---|---|---|---|
|
#18+
сорри, все оказалось проще... SELECT INTO zones src.zone_id AS src_zone_id, src.owner_id AS src_owner_id, dst.zone_id AS dst_zone_id, dst.owner_id AS dst_owner_id FROM tarif_zones_prefixes src, tarif_zones_prefixes dst WHERE NEW.src_ip<<=src.prefix AND NEW.dst_ip<<=dst.prefix AND ( src.owner_id <> 0 OR dst.owner_id <> 0 ) ORDER BY src.zone_id ASC, dst.zone_id ASC LIMIT 1; сеть такова, что нужно было проверять из какой тарифной зоны в каую проследовал пакет. соответственно его тарифицировать на основании каких-то правил. и задача стояла, чтобы одним! запросом определить приндлежность пакета тарифным зонам и клиентам. в предыдущем варианте это происходило с помощью 4-х запросов... З.Ы. если пакет не принадлежит никому из клиентов, он считается транзитным и не тарифицируется. ИМХО закрыть транзитный трафик - дело не биллинга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2006, 11:13 |
|
||
|
Оптимизация алгоритма или как юзать постгрис
|
|||
|---|---|---|---|
|
#18+
Алексей Ключников под netflow есть свои базы, которые оптимизированны под такие задачи. подскажите, плз, что это за базы... я таких не нашел.[/quot] Например http://]http://www.splintered.net/sw/flow-tools/docs/flow-tools.html Есть в портах Freebsd. Загоняю туда flow.. Ни когда не приходило в голову складывать flow в sql.. но это наверно потому, что у меня нет такого мощного сервера :(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 16:46 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34071790&tid=2006019]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
139ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 484ms |

| 0 / 0 |
