Запрос добавить в модуль. Как быстро это возможно ?
В скорем времени я думаю это будет многим необходимо.
Биллинговая система Nodeny |
04 Декабря 2024, 09:44:51 | |||
|
Новости: Прекращена поддержка версии Nodeny 49 |
Начало | Помощь | Поиск | Войти | Регистрация |
11
: 11 Октября 2024, 20:26:12
|
||
Автор Efendy - Последний ответ от fet4 | ||
Запрос добавить в модуль. Как быстро это возможно ?
В скорем времени я думаю это будет многим необходимо. |
12
: 25 Сентября 2024, 11:35:34
|
||
Автор route - Последний ответ от Alaxel | ||
Добрый день.
Можно добавить поведение для услуг Омеги, возможно отдельным параметром в настройках - при блокировке абонента по балансу посылать апи колл block? И включать при пополнении. И/или добавить возможность не уходить в минус, как для услуг inet, фризить услугу до пополнения баланса и опять таки отключать в самой Омеге до повторной активации. Поведение на данный момент - у абонента не хватает средств для продления на счету, услуга ОмегаТВ активируется на следующий месяц, списывает и вгоняет абона в минус, учетка блокируется по балансу, но при этом услуга Омега продолжает работать, в ЛК Омеги абонент активен. |
13
: 28 Июля 2024, 17:33:02
|
||
Автор Efendy - Последний ответ от SerjioMati | ||
ще є таке підключена послуга інет + мегого оптимальна, підключили послугу інет + максимальна, а потім просто інет. і послуга інет + оптимальна і інет + максимальна залишаються заморожені) а потім якщо абонент оплатить декілька місяців, вони розморожуються і підключені вже 3 послуги)
|
14
: 28 Июля 2024, 11:17:39
|
||
Автор Efendy - Последний ответ от Efendy | ||
У посуги є параметр "Не активувати послугу поки не стане достатньо коштів" - це один з варіантів (їх декілько) заморозки послуг. Також у модуля ядра services є параметр "Якщо послуга не може завершитися більше доби, наприклад, через проблеми API провайдера ТВ послуг, запускається процедура примусового завершення". Цей параметр захищає від ситуації, коли послуга через якісь проблеми не може завершитися і в цьому випадку вона б залишалася б підключеною вічно, поки це хтось не помітив. Був баг, коли заморожена послуга завершалася через добу через цей механізм. А вона може вісити вічно, бо ні на що не впливає, просто чекає грошей. Пофіксив
|
15
: 29 Июня 2024, 09:05:50
|
||
Автор Efendy - Последний ответ от Efendy | ||
16
: 26 Июня 2024, 20:08:20
|
||
Автор Efendy - Последний ответ от Efendy | ||
Рано чи пізно всі там будемо, тому треба думати про ipv6. Нажаль я не маю мережі і тому я не впроважував цю фічу бо я завжди намагаюсь все перевіряти. Я можу робити фічи віддаленно, але ця фіча доволі серьйозна, а всі з ким я контактував (ну такий уж я) не переконали мене робити на їх мережах.
В цій темі я хочу знайти правильний напрямок розвитку, таку реалізацію, щоб було як можна більше плюсів і як можна меньше мінусів. Поки я почну з міркувань) Я хочу зробити дуже нескладну реалізацію. Принаймні на початку. Можна сказати зараз це моя головна ціль - зробити саме нескладно. Тому що я бачу, що ipv6 це як раз спрощення. Дивно, але це так. Чому я це стверджую? ip v4 мають обмежану кількість адрес, тому нам постійно треба щось робити щоб обходити це обмеження. Один з варіантів - це пул ip адрес. В цьому і основна проблема - дедлокі та постійні затупи коли нам треба вибрати вільну адресу. В ip v6 по ідеї не повино цього бути. Що таке видача ip адреси? Це функція, яка отримує на вхід id абонента, а на виході видає його ip. Коли в ip v6 адрес настільки багато, то ми можемо вираховувати ip по формулі без всяких пулів. Давайте приклад в ip версії 4 (чотири) я покажу як це могло бути: Код: user id = 10 ip = 10.0.0.10 Звичайно в ipv4 це не може працювати, бо якщо ми видалемо user-а з id = 25, то вільна адреса 10.0.0.25 нікому ніколи не буде видана. Тому придумали всякі прив'язки ip, пули і т.д. В ipv6 адрес настільки багато, що ці дирки можна ігнорувати. Більше! Я знаю, що є мережі, які не можуть ігнорувати ці дирки, тому що в них є дуже великі підмережі для великих клієнтів. Але навіть в цьому випадку у мене є простий алгоритм без дирок! Я це назвав "стратегією". Зараз приведу реалізацію, де використовується стратегія 0 (супер примитивна, супер швидка, но з "дирками") і стратегія 1 (трохи повільніша, але без дирок). Створив таблицю: Код: select * from ipv6_nets; якщо у клієнта в допданих буде прописано "видавати ip /56", то ми будемо видавати ip з мережи FFFF:BBBB::. При цьому використовувати стратегію 0. Наприклад, у нас 4 абона, Код: id=2 ipv6_mask=56 забігаючи вперед покажу результат видачі ip: Код: MySQL [nodeny]> select ipv6_by_uid(2); Тобто видно, що перші 2 адреси отримані по стратегії 0 - тобто id юзера просто вписується в ipv6 мережу. Я знаю деякі так і роблять. Id у юзера постійний, він буде постійно отримувати одну й ту саму адресу і ніколи ні з ким не перетинеться. Інші 2 адреси отримані по стратегії 1 - грубо кажучи, в момент розрахунку ip, вони нумеруються по-порядку з одиниці і цей номер йде в формулу. Наважливо наскільки великий id - він по ітогу буде маленьким (в залежності від загальної кількості абонетів в цієй стратегії). В одній мережі можна використовувати і одну стратегію і обидві. Тепер сама функція видачі ip: Код: DROP FUNCTION IF EXISTS `ipv6_by_uid`; Вона реально дуже проста. Її можна ускладнити коли буде декілько мереж з однією маскою, но то вже інша задача. Чому все, що я написав, здається мені дуже простим? Тому що в білінгу не використовується ніяких пулів, ніяких прив'язок і т.д. Все що додається: 1) інтерфейс редагування ipv6 мереж 2) вивід ip адреси у абона 3) відредагувати ваши радіуси, ви же знаєте які там атрібути видавать залізякам Тобто можна запустити ipv6 для частини мережі, білінг і не помітить цього, ну тобто всі ipv4 процеси будть йти як і йшли до цього. |
17
: 25 Июня 2024, 15:28:22
|
||
Автор Efendy - Последний ответ от Efendy | ||
Створив гілку, але скоріше тільки для себе - щоб не забути які я робив дослідження. Ну якщо комусь є щось сказати, можете висловлюватись)
Чим більше даних в базі даних, тім повільніше вона працює, це очевидно. Але в більшості випадків потрібні актуальні дані - ну, наприклад, платежи тільки за останній період. По дефолту при переході в розділ "платежі" там як раз і показуються платежі за останні декілька місяців. Для таких ситуацій в базах даних використовують фішку "партіціювання" - це коли дані однієї таблиці розділяються не декілька, умовно кажуючи таблиць. Наприклад, можна розділити по даті: за 2023рік в такий таблиці, за 2024й в іншій таблиці і так далі. Насправді для нас це виглядає як одна таблиця, а всю работу під капотом виконує субд. Що нам дає це: дікілька таблиць меньше ніж одна. Тому і запис і вибірка будуть швидше. Це і є основна ціль. Виникає питання: а як вибирати інформацію з великого діапазону, коли частина буде в одній, а частина в нішій "таблиці" (цях)? Величезний плюс в тому, що це робить сама СУБД! Вона знає коли звернутися до однієї таблиці, а коли до декількох. Все. Далі піде технічна інфа, скоріше за все тільки для мене) Я провів дослідження: * як зробити партіціювання * буде воно робити з реплікацією мастер-слейв Підняв 2 докера з mysql-8 і налаштував реплікацію. Щось додаю на мастері - і це з'являється на слейві. Ура мені і докеркомпоузу. Намагаюсь зробити партіціювання по полю time: Код: ALTER TABLE pays PARTITION BY RANGE (time) ( Ідея така: дані до 24 року зберігаю в партиції p2023, до 25го - в p2024, інші в pmax. Але це не працює: Код: ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function (prefixed columns are not considered На цьому можна було закінчити. Короче, у мускула (чи скрізь так) обмеженне партіціювання - неможна розділяти на часті, якщо поле, по якому йде розділення не входить в прімарі кі. Я не знаю чому, може логіка в цьому є. Але мені потрібне вирішення проблеми. Ладно, я використав більш простий варіант - розділяти по id. Нам потрібно буде просто вибрати який максимальний id в якому році: Код: ALTER TABLE pays PARTITION BY RANGE (id) ( 3 і 8 маленьки числа бо це все тестово. Код: SELECT PARTITION_NAME, TABLE_ROWS показує що робить: Код: +----------------+------------+ Виконав це на слейві - все робить так само. Як отримати доступ до ціх розділів напряму? В постгресі я міг, тут не можу. В принципі, це не потрібно, але є випадок коли нам би це знадобилося - коли ми хочемо бекапити тільки частину поточного року. В інших бекапах будуть данні за інші роки, тому нам не потрібно втрачати час і дисковий простір на бекап старих даних. mysqldump дампить всю таблицу. Ну ок, не фартануло по цьому питанню. Але ж з гуглежем в 5 хвилин я можу і помилятися, просто для мене це питання непринципово. Ітак. Як подивиться, що ми маємо якийсь профіт: Код: explain select * from pays where id<3; тут бачимо, що профіт є - вибірка йде чисто з розділу p2023 Перевіряємо, що субд може шукати одразу по декількох розділів: Код: explain select * from pays; Але в бою ми профіта не отримаємо, бо нам був би корисний такий запит: Код: explain select * from pays where time<unix_timestamp('2020-01-01'); Але він, очиковано, ніякого профіту не дає: Код: +----+-------------+-------+------------------+-------+---------------+------+---------+------+------+----------+-----------------------+ Тобто на даном етапі я не бачу варіанту отримати плюси від партіціювання. Можливо ми щось виграємо на швидкості вставки даних в таблицю pays. Але це потрібно проводити дослідження на великіх даних. При цьому я не думаю, що зараз є у когось проблеми саме при створюванні даних в таблиці pays. Але. Все може бути не так як я думаю, бо я витратив на все 4 години, а це малова-то для експертної думки |
18
: 19 Июня 2024, 14:50:45
|
||
Автор Maks - Последний ответ от Belos | ||
Добрый день всем! А есть возможность подсказать тут по восстановлению базы? симтомы похожи Цитировать ERROR at line 1: Unknown command '\"'. решил |
19
: 19 Июня 2024, 13:35:14
|
||
Автор Maks - Последний ответ от Belos | ||
Добрый день всем! А есть возможность подсказать тут по восстановлению базы? симтомы похожи
Цитировать ERROR at line 1: Unknown command '\"'. |
20
: 19 Мая 2024, 15:57:23
|
||
Автор Efendy - Последний ответ от Efendy | ||