Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: База на файлах
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » База на файлах

Страниц (2): [1] 2 »
 

1. Саня_1991 - 27 Февраля, 2014 - 23:16:24 - перейти к сообщению
Написал базу на файлах в принципе при проверке держит большую зацикленость ( 0...100000000 ) бывает сбой при записи в большие файлы 80мб и выше. Эсть ли действующий вариант запирания файла?
2. OrmaJever - 27 Февраля, 2014 - 23:20:33 - перейти к сообщению
flock, хотя возможно и не поможет Растерялся
3. Саня_1991 - 27 Февраля, 2014 - 23:22:06 - перейти к сообщению
flock не помогает.
4. man1 - 28 Февраля, 2014 - 10:01:14 - перейти к сообщению
Можно реализовать механизм очереди всех запросов в базе. Делать lock на уровне файла или записи, а потом unlock. Нужно создавать файл-флаг после лока, и удалять после окончания работы. Надо подумать, может есть и другие варианты.

Вообще мне тоже интересна тематика бд на файлах. Если интересно, можно попробовать совместно обсудить идеи и наработки.
5. Саня_1991 - 28 Февраля, 2014 - 14:11:06 - перейти к сообщению
Я сначала тоже думал с кем то разрабатывать но нигде на форумах мастеров не регистрировался, а так помаленьку сам написал осталось подогнать и можно вылаживать в сеть.
man1 если тебе интересна тематика бд на файлах то могу сказать что я использую три функции:
1 - Создаю файл по md5 ( Шифрует к примеру Логин Название Имя )
2 - Присваеваю id номер записи для ускорения нахождения нужного md5 файла
3 - Так же как 1 только создаеться файл с id букв ввода для поиска
Не понял думаю не ясно но работаю над этим больше года
6. man1 - 28 Февраля, 2014 - 16:23:52 - перейти к сообщению
Саня_1991 пишет:
man1 если тебе интересна тематика бд на файлах то могу сказать что я использую три функции:
1 - Создаю файл по md5 ( Шифрует к примеру Логин Название Имя )
2 - Присваеваю id номер записи для ускорения нахождения нужного md5 файла
3 - Так же как 1 только создаеться файл с id букв ввода для поиска
Не понял думаю не ясно но работаю над этим больше года

Хех, это натурально бд на файлах (на миллионах файлах для большой БД), то есть для каждой записи из каждого поля таблицы БД у тебя соответствует свой файл. Я бы даже сказал что это не реализация СУБД, а реализация варианта индексирования (для быстрого поиск к заранее известной записи).

Какие функции интерфейса по работе с бд ты планировал? Например:
table_create(...)
table_update(...)
table_delete(...)
record_insert(...)
record_select(...)
record_update(...)
record_delete(...)
field_add(...)
...

Под бд на файлах я все же понимаю вот эти функции и файлы с которыми они работают (файл данных, файл записей и разметки, файл индексов).
7. Саня_1991 - 28 Февраля, 2014 - 19:45:44 - перейти к сообщению
Если я правильно понял выше ты написал интерфейсы с мускула ? Я про мускул мало знаю правильно сказать ничего Огорчение . А написал "функции интерфейса" Добавить, Удалить, Получить инф. с файла, Поиск файла, Создать "Таблицу" в моем случаем папку.
А создаеться "таблица" папка:
users/md5 - разбераю строку md5 по первым 6-ти буквам на подпапки что бы уменьшить количество файлов в папке
/id - файлов в подпапках по 1000
/for_search - так же как в md5 только разберает по первым 3-м буквам (буквы переводяться в "индексы"). Как то так Улыбка
8. man1 - 28 Февраля, 2014 - 22:41:45 - перейти к сообщению
Саня_1991 пишет:
Если я правильно понял выше ты написал интерфейсы с мускула ? Я про мускул мало знаю правильно сказать ничего Огорчение . А написал "функции интерфейса" Добавить, Удалить, Получить инф. с файла, Поиск файла, Создать "Таблицу" в моем случаем папку.
А создаеться "таблица" папка:
users/md5 - разбераю строку md5 по первым 6-ти буквам на подпапки что бы уменьшить количество файлов в папке
/id - файлов в подпапках по 1000
/for_search - так же как в md5 только разберает по первым 3-м буквам (буквы переводяться в "индексы"). Как то так Улыбка

Я привел часто употребляемым операции над любыми данными (хоть в mysql, хоть на файлах). Вижу что ты увлечен реализацией, но чтобы оценить правильно ли ты делаешь, нужно знать насколько это соответствует задачам которые надо решить. Про md5 я не понял, зачем это везде там преследует.

Ты вообще пробовал работать с данными не раскидывая по файлам, а храня все что надо внутри одного-четырех специально организованных файла (с помощью функций fopen, fseek, fread, fwrite и т.д.)? Если не пробовал, то тогда дальше обсуждать нет смысла, ибо это будет означать отсутствие у тебя нужного опыта.

Да, хранить тысячи, а для больших данных миллионы файлов это вообще никуда не годиться - слишком медленно и монструозно.
9. Саня_1991 - 28 Февраля, 2014 - 23:08:39 - перейти к сообщению
Попробуй работать с одним файлом в 1000000 строк используя функцию file выведи его цыклом по 10 строк + постраничная навигация это долго, А ограничение "Fatal error: Allowed memory size" вот тебе "монструозно".
Медлено? Как? Если имеем полный путь к нужному файлу.
md5 не везде только в 1, а for_search использует реально введёный текст.
Может я чего то не понял.
(Добавление)
Файл 098f6bcd4621d373cade4e832627b4f6 .dat будет лежать в ..../md5/0/9/8/f/6/b/098f6bcd462 1d373cade4e832627b4f6.dat
Путь к файлу в ID.dat/ - test|..../md5/0/9/8/f/6/b/098f6bcd4621d373cade4e832627b4f6.dat|
Использование скажем в форуме нужно сообщение 34534 берём его id и получаем путь к файлу с сообщением + кто писал + дата +...
Я думаю это удобно если организовывать одну базу с админ панелью конечно можно писать под каждый модуль свой метод и использовать скажем для форума: Раздел/тема.dat
может оно лучше но везде нужно писать с индивидуальными потходом и требованиям, а так можно организовать более или менее универсальный способ хранения базы в файлах.
Ищо к верхнему сообщению прибавь поиск по ячейкам строк + перезапись строки или удаление + цыкл в два окна и нету базы зделал запирание и получаем огромное время ожидания.
Вот тут и нужный опыт.
Твои предложения?
10. man1 - 28 Февраля, 2014 - 23:28:20 - перейти к сообщению
Саня_1991 пишет:
Попробуй работать с одним файлом в 1000000 строк используя функцию file выведи его цыклом по 10 строк + постраничная навигация это долго, А ограничение "Fatal error: Allowed memory size" вот тебе "монструозно".
Медлено? Как? Если имеем полный путь к нужному файлу.
md5 не везде только в 1, а for_search использует реально введёный текст.
Может я чего то не понял.

Я что-то писал про функцию file? Таким способом читать данные больших файлов не получиться. Почитай описание к функциям fopen, fseek, fread, fwrite. С ними логика совсем другая, ты работаешь внутри одного файла, но при этом создаешь в нем структуру и перемещаешься по ней прямо внутри файла с помощью функции смещения указателя fseek!
11. Саня_1991 - 28 Февраля, 2014 - 23:30:35 - перейти к сообщению
Используя fread, fseek я добился коректной работы.
(Добавление)
Используя fread, fseek я не добился коректной работы. Пардон
12. man1 - 28 Февраля, 2014 - 23:35:53 - перейти к сообщению
Саня_1991 пишет:
Используя fread, fseek я не добился коректной работы.

И на этом основании ты сделал вывод что это невозможно и стал придумывать монстра на тысячах файлах? Улыбка
13. Саня_1991 - 28 Февраля, 2014 - 23:38:45 - перейти к сообщению
Если правильно понимаю fread, fseek то там нужно знать длину строки правильно?
14. man1 - 28 Февраля, 2014 - 23:44:35 - перейти к сообщению
Саня_1991 пишет:
Если правильно понимаю fread, fseek то там нужно знать длину строки правильно?

Я представляю это так (упрощенно):

my_table.dat - сюда в конец файла записывается строка данных (ограниченной или любой длины, не важно)
my_table.rec - а сюда в конец записывается 20-байтная строчка, первые десять байт содержать позиции начала записи в файле dat, вторые десять длину строки.

Это есть основа, от которой вырастает уже все остальное, потом прирастает система индексирования для быстрого поиска и т.д.
15. Саня_1991 - 28 Февраля, 2014 - 23:48:49 - перейти к сообщению
Интересно. php ограничевает по размеру файла?

 

Powered by ExBB FM 1.0 RC1