|
|
|
Тарифы в биллинге
|
|||
|---|---|---|---|
|
#18+
С помощью каких средств обычно вычисляются денежные списания в биллинге ethernet-провайдера? Есть таблица логов iptables. Поля pkts,bytes,source,dest,timestamp (по две строчки на клиента, то есть вх и исх трафик). Добавляются раз в n минут. Есть таблица тарифов с временными скидками, с понижением цены в зависимости от суммарного трафика за месяц (сетка скидок). Деньги должны списываться в течении всего расчетного периода (возможно абонплата списывается по истечении это го периода или пропорционально). При завершении средств должна происходить блокировка. Думаю реализовывать это с помощью триггеров на INSERT на таблицу с логами. При добавлении новой строки запускать процедуру, которая будет считать списания за период с последнего обновления данных и делать UPDATE в таблице счетов, вычитая из поля баланс деньги. В правильном ли я направлении мыслю и если несложно поделитесь простыми примерами решения этой задачи. Или может есть, где прочитать об этом. PS:PostgreSQL 8.1.4, Linux. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2006, 11:35 |
|
||
|
Тарифы в биллинге
|
|||
|---|---|---|---|
|
#18+
posttДумаю реализовывать это с помощью триггеров на INSERT на таблицу с логами. При добавлении новой строки запускать процедуру, которая будет считать списания за период с последнего обновления данных и делать UPDATE в таблице счетов, вычитая из поля баланс деньги. В правильном ли я направлении мыслю и если несложно поделитесь простыми примерами решения этой задачи. Или может есть, где прочитать об этом. К сожалению, не могу поделиться конкретными способами решения - тексты принадлежат работодателю. Но предостеречь, думаю, могу: не получится. Вы просто не сможете грузить трафик с нужным рейтом, если на таблице будет висеть триггер. Даже простой индекс может представлять проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2006, 00:12 |
|
||
|
Тарифы в биллинге
|
|||
|---|---|---|---|
|
#18+
contr posttДумаю реализовывать это с помощью триггеров на INSERT на таблицу с логами. При добавлении новой строки запускать процедуру, которая будет считать списания за период с последнего обновления данных и делать UPDATE в таблице счетов, вычитая из поля баланс деньги. В правильном ли я направлении мыслю и если несложно поделитесь простыми примерами решения этой задачи. Или может есть, где прочитать об этом. К сожалению, не могу поделиться конкретными способами решения - тексты принадлежат работодателю. Но предостеречь, думаю, могу: не получится. Вы просто не сможете грузить трафик с нужным рейтом, если на таблице будет висеть триггер. Даже простой индекс может представлять проблему. Спасибо за подсказку. В каком направлении смотреть тогда? Может тогда раз в какое-то время запускать процедуру или программу по cron-у, которая проверяет последние внесения в таблицу по дате и для еще не обработанных строк производит вычисления? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2006, 07:04 |
|
||
|
Тарифы в биллинге
|
|||
|---|---|---|---|
|
#18+
Примитивная схема: читатель логов -> агрегатор -> загружатель в базу -> тарификатор Более сложная включает в себя разные способы сбора сырого трафика (CDR, Radius, etc.), отсутствие агрегатора и быструю загрузку прямо в мозг БД (на Oracle и им подобных, поддерживающих direct load) и много всякой другой ерундистики. Тарификация может выполняться как при загрузке трафика, так и постфактум (раз в N-ое количество минут). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:09 |
|
||
|
Тарифы в биллинге
|
|||
|---|---|---|---|
|
#18+
А насчет триггера - уже было сказано, что идея крайне плохая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:11 |
|
||
|
Тарифы в биллинге
|
|||
|---|---|---|---|
|
#18+
А вообще - тема интересная. С удовольствием написал бы свой маленький биллинг (применяя знания полученные на работе с большими системами). Куда его только потом девать - бесплатно раздавать что-ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:15 |
|
||
|
Тарифы в биллинге
|
|||
|---|---|---|---|
|
#18+
он жеА вообще - тема интересная. С удовольствием написал бы свой маленький биллинг (применяя знания полученные на работе с большими системами). Куда его только потом девать - бесплатно раздавать что-ли? open source billing и драть втридорога за поддержку? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 15:28 |
|
||
|
Тарифы в биллинге
|
|||
|---|---|---|---|
|
#18+
он жеПримитивная схема: читатель логов -> агрегатор -> загружатель в базу -> тарификатор Более сложная включает в себя разные способы сбора сырого трафика (CDR, Radius, etc.), отсутствие агрегатора и быструю загрузку прямо в мозг БД (на Oracle и им подобных, поддерживающих direct load) и много всякой другой ерундистики. Тарификация может выполняться как при загрузке трафика, так и постфактум (раз в N-ое количество минут). Что из себя должен представлять агрегатор? Например есть логи iptables-а (байты,ip источника,ip получателя), можно еще время записать. Чтобы биллинг был горячим надо снимать данные и списывать деньги хотя бы раз в 15 минут (лучше каждые 5). Если использовать поток netflow, то почти тоже самое. Данные надо все равно скидывать достаточно часто в тарификатор. Тарификатором на мой взгляд должна быть БД с процедурами расчета. В приведенной вами схемой не описана связь между загружателем в БД и тарификатором. Вопрос был именно в этом. Есть загружаемые данные и их нужно тарифицировать, так почему же их не тарифицировать сразу при добавлении, то есть триггером. Если сначала добавлять,а потом тарифицировать, то загрузка ведь не будет меньше? Интересует именно вопрос тарификации загружаемых данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 18:10 |
|
||
|
Тарифы в биллинге
|
|||
|---|---|---|---|
|
#18+
postt Что из себя должен представлять агрегатор? Например есть логи iptables-а (байты,ip источника,ip получателя), можно еще время записать. Чтобы биллинг был горячим надо снимать данные и списывать деньги хотя бы раз в 15 минут (лучше каждые 5). Если использовать поток netflow, то почти тоже самое. Данные надо все равно скидывать достаточно часто в тарификатор. Тарификатором на мой взгляд должна быть БД с процедурами расчета. В приведенной вами схемой не описана связь между загружателем в БД и тарификатором. Вопрос был именно в этом. Есть загружаемые данные и их нужно тарифицировать, так почему же их не тарифицировать сразу при добавлении, то есть триггером. Если сначала добавлять,а потом тарифицировать, то загрузка ведь не будет меньше? Интересует именно вопрос тарификации загружаемых данных. Агрегатор должен агрегировать трафик по портам, зонам, времени. Зависит от конкретного случая - какая информация для нас не актуальна. Допустим, если тарифицируем только _объем_ трафика _независимо от типа и зоны_ - можем выкинуть информацию по тому, на какой порт он приходил, на какой ip-адрес и когда (нам это абсолютно неважно для тарификации) и просто суммировать по всем портам за определенный промежуток времени - получаем реальное уменьшение входного потока в тарификатор. Это лишь пример. Тарификатором может быть приблуда написанная на C++ - совершенно не важно. Важно лишь то, что данные должны загружаться максимально быстро. И читать ты их должен максимально быстро, обрабатывая за раз как можно большее количество строк (в пределах разумного). Если хочешь пользоваться триггерами - хорошо, ради бога. Кто же запрещает? С PostgreSQL я не знаком, попробую рассказать в терминах Оракла. Триггер должен быть не FOR EACH ROW. Триггер должен вызывать функции пакета, в котором будут закэшированны (тем или иным способом) тарифы. Если ты уверен, что мощности и скорости встроенного языка в PostgreSQL хватит для такого делай - действуй. Думаю, этой информации достаточно. Дальше начинаются разнообразные хитрости. У каждого они свои. Делиться вряд ли кто будет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 19:36 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34018669&tid=1545014]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
144ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 465ms |

| 0 / 0 |
