Причём тут упоминание NoSQL применительно к реляционной sqlite?
Иногда делают очень специфические решения для необычных задач. Например, Internet Archive хранит данные в виде архивов на диске - никакой базы.
Или вот если вспомнить почту, то dovecot хранит каждый ящик отдельно от других. Ещё бывают почтовики, у которых mailbox (все письма одним файлом длинной портянкой) или maildir (письма отдельными файлами с timestamp в имени).
Но в целом это неудобно для больших масштабируемых решений.
Да, чтобы это работало нормально (актуально резался спам, ничего не отваливалось итд), нужно постоянно следить и прикладывать усилия.
Когда какое-нибудь письмо о регистрации на Нужном Сайте не доходит до mail.ru - Нужный Сайт напряжётся и что-нибудь сделает. Когда оно не доходит на маленький сервачок - сайт пошлёт пользователя самого искать подходящих тараканов в своей конфигурации. Придётся осваивать навыки чтения логов, изучения документации по конфигам итд.
Но если всё же хочется, то рекомендую посмотреть на проект MailCow.
Данил, умные слова типа "колцо вычетов по модулю p" - это не так страшно. Это когда мы берём не все числа вообще, а только остатки от деления на p. И переопределяем основные операции: сложение берём по остатку, умножение тоже. Например, если p=7, то 2*4 mod 7 = 1.
В python так:
(2*4) % 7
Определённые подобным образом "сложение" и "умножение" обладают рядом свойств: коммутативность (a+b=b+a, a*b=b*a), ассоциативность (a+(b+c)=(a+b)+c) и некоторыми другими. Собственно, такое вот множество с двумя операциями и некоторыми особыми свойствами называют в алгебре кольцом.
Но всё это для задачи не очень важно. Тут достаточно просто брать остаток по длине словаря:
jcmvbkbc, нет, inline-функция это не макрос и не может содержать ошибок. Изначально inline-функции в C означали именно то, что они никак не вызывались (call/ret), а просто копировались в целевую функцию, чтобы избежать относительно дорогой операции вызова (особенно far call, когда вызов осуществлялся не в пределах сегмента по смещению, а с переходом в другой сегмент) для очень простых функций. Разумеется, это также означает, что экспорт inline-функции как символа в принципе лишён смысла.
inline-функция не должна компилироваться, её тело должно вставляться в нужное место программы и компилироваться каждый раз заново. Соответственно, ld её и не сможет увидеть никогда в принципе. Кстати, inline-функции надо описывать в h-файлах, а не c-файлах.
Вполне возможно, что фильтруют не по "телефону", а по Wi-Fi (если компьютеры подключены проводом) или на мак-адреса компьютеров (их IP) просто белый список.
Юра, искать в гугле "создать systemd-сервис". В нём использовать команду типа /usr/bin/icecast -c /path/to/config.xml. Немного поотлаживать (убедиться, что стартует как надо, что запускается при запуске системы итд). Сделать 10 копий с разными именами и конфигами.
Ещё можно научиться делать сервис icecast@, который будет брать суффикс и по нему выбирать конфиг. Тогда можно сделать, чтобы сервис с именем icecast@radio1 означал конфиг /etc/icecast/radio1.xml. Но это уже задача со звёздочкой.
Юра, icecast.site1.ru:8000/radio1, icecast.site2.ru:8000/radio2 - две ссылки с разными доменами на одном IP. Но, конечно, можно и несколько icecast запустить, если очень хочется.
Иногда делают очень специфические решения для необычных задач. Например, Internet Archive хранит данные в виде архивов на диске - никакой базы.
Или вот если вспомнить почту, то dovecot хранит каждый ящик отдельно от других. Ещё бывают почтовики, у которых mailbox (все письма одним файлом длинной портянкой) или maildir (письма отдельными файлами с timestamp в имени).
Но в целом это неудобно для больших масштабируемых решений.