Php функция для текстовой бд
Нужна функция для выборки/записи/перезаписи данных в текстовом файле типа сsv.
В базе находятся урлы с их характеристиками, построчно.
Пример:
ID||Ip||Url||arg1||arg-n
0001||74.125.95.99||http://google.com||123||abc||i t.d.
0002||67.195.160.76||http://www.yahoo.com||4ads||63||i t.p.
Флаги:
New (этот флаг используется при обязательном присутствии переменной-идентификатора Url остальные переменные необязательны)
Write(этот флаг используется при обязательном присутствии переменной-идентификатора Url и любой необязательной переменной)
Select(этот флаг используется с любой переменной)
Использование:
При получении функцией переменной Url с флагом new
funct(Url'http://video.google.com', New)
(делается проверка) и при условии, что такого урл нет в базе создается новая строка с записью вида 0003||||http://video.google.com||||||
и база выглядит
ID||Ip||Url||arg1||arg-n
0001||74.125.95.99||http://google.com||123||abc||i t.d.
0002||67.195.160.76||http://www.yahoo.com||4ads||63||i t.p.
0003||||http://video.google.com||||||
Переменная ID первоначально присваивается автоматически, она же в последствии группирует урлы:
Автоматически при поступлении переменной Ip делается проверка на предмет нахождения такого Ip адреса или диапазону в +- несколько адресов пример:
funct(Url'http://video.google.com', Ip'74.125.95.113', Write)
если диапазон в функции указан 14 в этом случае записи об урл http://video.google.com переназначается ID c 0003 на 0001 и база преобразуется в
ID||Ip||Url||arg1||arg-n
0001||74.125.95.99||http://google.com||123||abc||i t.d.
0001||74.125.95.113||http://video.google.com||||||
0002||67.195.160.76||http://www.yahoo.com||4ads||63||i t.p.
Вручную, я сам присваиваю какой то записи ID независимо от Ip.
Во все остальных случаях флаг Write дозаписывает или перезаписывает необязательные переменные относящиеся к Url.
Флаг Select делает выборку по указанным переменным и возвращает массив из Url.
К нему нужны 3 дополнительные встроеные опции:
1)рандомная выборка по базе
2)ограничение по количеству Url вывода в массив
3)выдача Url из груп в процентном соотношении
пример:
funct(arg1'4ads', Select[group30])
т.е. в выдаче от каждой группы должно быть ~30%(но не менее одного) от общего количества Url находящихся в группе и удовлетворяющих условию arg1 = '4ads'
Все 3 опции могут использоваться как отдельно, так и совместно с флагом select.
Планируется многопоточное ипользование базы, нужен оптимальный механизм сочитающий производительность и защиту от искажения.