Биллинговая система Nodeny |
![]() |
04 Апреля 2025, 12:12:58
![]() |
|||
|
Новости: Прекращена поддержка версии Nodeny 49 |
Начало | Помощь | Поиск | Войти | Регистрация |
21
: 29 Июня 2024, 09:05:50
|
||
Автор Efendy - Последний ответ от Efendy | ||
22
: 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 процеси будть йти як і йшли до цього. |
23
: 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 години, а це малова-то для експертної думки |
24
: 19 Июня 2024, 14:50:45
|
||
Автор Maks - Последний ответ от Belos | ||
Добрый день всем! А есть возможность подсказать тут по восстановлению базы? симтомы похожи Цитировать ERROR at line 1: Unknown command '\"'. решил |
25
: 19 Июня 2024, 13:35:14
|
||
Автор Maks - Последний ответ от Belos | ||
Добрый день всем! А есть возможность подсказать тут по восстановлению базы? симтомы похожи
Цитировать ERROR at line 1: Unknown command '\"'. |
26
: 19 Мая 2024, 15:57:23
|
||
Автор Efendy - Последний ответ от Efendy | ||
27
: 02 Мая 2024, 12:30:22
|
||
Автор Efendy - Последний ответ от k291 | ||
в модуле Portmone v1, какой url для обмена данными?
|
28
: 11 Апреля 2024, 11:34:00
|
||
Автор Efendy - Последний ответ от SerjioMati | ||
так їх там нема) угу. у мене платинова карта від моно, то за кожну тисячу 11 миль) але сука йдеш до нас у магазин і там навіть 1500 грн умудряються розділити на 2 чеки) і я хер отримаю, а не кешбек... |
29
: 09 Апреля 2024, 09:27:52
|
||
Автор Efendy - Последний ответ от WideAreaNetwork | ||
так їх там нема)
|
30
: 07 Апреля 2024, 21:49:40
|
||
Автор Efendy - Последний ответ от SerjioMati | ||
хто налаштовував для себе портмоне з декількома мерчантами, покажіть будь ласка налаштування свої невже ні в кого нема декілька мерчантів?ні. всі роблять все як потрібно) без махінацій.... ![]() ![]() ![]() |