Php функция для текстовой бд

Донцов17 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
02.12.2010

Нужна функция для выборки/записи/перезаписи данных в текстовом файле типа с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.

Планируется многопоточное ипользование базы, нужен оптимальный механизм сочитающий производительность и защиту от искажения.