Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2014 Откуда: Первомайск Украина
Помог: 0 раз(а)
Написал базу на файлах в принципе при проверке держит большую зацикленость ( 0...100000000 ) бывает сбой при записи в большие файлы 80мб и выше. Эсть ли действующий вариант запирания файла?
OrmaJever
Отправлено: 27 Февраля, 2014 - 23:20:33
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Саня_1991
Отправлено: 27 Февраля, 2014 - 23:22:06
Новичок
Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2014 Откуда: Первомайск Украина
Помог: 0 раз(а)
flock не помогает.
man1
Отправлено: 28 Февраля, 2014 - 10:01:14
Новичок
Покинул форум
Сообщений всего: 57
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Можно реализовать механизм очереди всех запросов в базе. Делать lock на уровне файла или записи, а потом unlock. Нужно создавать файл-флаг после лока, и удалять после окончания работы. Надо подумать, может есть и другие варианты.
Вообще мне тоже интересна тематика бд на файлах. Если интересно, можно попробовать совместно обсудить идеи и наработки.
Саня_1991
Отправлено: 28 Февраля, 2014 - 14:11:06
Новичок
Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2014 Откуда: Первомайск Украина
Помог: 0 раз(а)
Я сначала тоже думал с кем то разрабатывать но нигде на форумах мастеров не регистрировался, а так помаленьку сам написал осталось подогнать и можно вылаживать в сеть.
man1 если тебе интересна тематика бд на файлах то могу сказать что я использую три функции:
1 - Создаю файл по md5 ( Шифрует к примеру Логин Название Имя )
2 - Присваеваю id номер записи для ускорения нахождения нужного md5 файла
3 - Так же как 1 только создаеться файл с id букв ввода для поиска
думаю не ясно но работаю над этим больше года
man1
Отправлено: 28 Февраля, 2014 - 16:23:52
Новичок
Покинул форум
Сообщений всего: 57
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Саня_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(...)
...
Под бд на файлах я все же понимаю вот эти функции и файлы с которыми они работают (файл данных, файл записей и разметки, файл индексов).
Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2014 Откуда: Первомайск Украина
Помог: 0 раз(а)
Если я правильно понял выше ты написал интерфейсы с мускула ? Я про мускул мало знаю правильно сказать ничего . А написал "функции интерфейса" Добавить, Удалить, Получить инф. с файла, Поиск файла, Создать "Таблицу" в моем случаем папку.
А создаеться "таблица" папка:
users/md5 - разбераю строку md5 по первым 6-ти буквам на подпапки что бы уменьшить количество файлов в папке
/id - файлов в подпапках по 1000
/for_search - так же как в md5 только разберает по первым 3-м буквам (буквы переводяться в "индексы"). Как то так
man1
Отправлено: 28 Февраля, 2014 - 22:41:45
Новичок
Покинул форум
Сообщений всего: 57
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Саня_1991 пишет:
Если я правильно понял выше ты написал интерфейсы с мускула ? Я про мускул мало знаю правильно сказать ничего Огорчение . А написал "функции интерфейса" Добавить, Удалить, Получить инф. с файла, Поиск файла, Создать "Таблицу" в моем случаем папку.
А создаеться "таблица" папка:
users/md5 - разбераю строку md5 по первым 6-ти буквам на подпапки что бы уменьшить количество файлов в папке
/id - файлов в подпапках по 1000
/for_search - так же как в md5 только разберает по первым 3-м буквам (буквы переводяться в "индексы"). Как то так Улыбка
Я привел часто употребляемым операции над любыми данными (хоть в mysql, хоть на файлах). Вижу что ты увлечен реализацией, но чтобы оценить правильно ли ты делаешь, нужно знать насколько это соответствует задачам которые надо решить. Про md5 я не понял, зачем это везде там преследует.
Ты вообще пробовал работать с данными не раскидывая по файлам, а храня все что надо внутри одного-четырех специально организованных файла (с помощью функций fopen, fseek, fread, fwrite и т.д.)? Если не пробовал, то тогда дальше обсуждать нет смысла, ибо это будет означать отсутствие у тебя нужного опыта.
Да, хранить тысячи, а для больших данных миллионы файлов это вообще никуда не годиться - слишком медленно и монструозно.
Саня_1991
Отправлено: 28 Февраля, 2014 - 23:08:39
Новичок
Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2014 Откуда: Первомайск Украина
Помог: 0 раз(а)
Попробуй работать с одним файлом в 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
может оно лучше но везде нужно писать с индивидуальными потходом и требованиям, а так можно организовать более или менее универсальный способ хранения базы в файлах.
Ищо к верхнему сообщению прибавь поиск по ячейкам строк + перезапись строки или удаление + цыкл в два окна и нету базы зделал запирание и получаем огромное время ожидания.
Вот тут и нужный опыт.
Твои предложения?
man1
Отправлено: 28 Февраля, 2014 - 23:28:20
Новичок
Покинул форум
Сообщений всего: 57
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Саня_1991 пишет:
Попробуй работать с одним файлом в 1000000 строк используя функцию file выведи его цыклом по 10 строк + постраничная навигация это долго, А ограничение "Fatal error: Allowed memory size" вот тебе "монструозно".
Медлено? Как? Если имеем полный путь к нужному файлу.
md5 не везде только в 1, а for_search использует реально введёный текст.
Может я чего то не понял.
Я что-то писал про функцию file? Таким способом читать данные больших файлов не получиться. Почитай описание к функциям fopen, fseek, fread, fwrite. С ними логика совсем другая, ты работаешь внутри одного файла, но при этом создаешь в нем структуру и перемещаешься по ней прямо внутри файла с помощью функции смещения указателя fseek!
Саня_1991
Отправлено: 28 Февраля, 2014 - 23:30:35
Новичок
Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2014 Откуда: Первомайск Украина
Помог: 0 раз(а)
Используя fread, fseek я добился коректной работы. (Добавление)
Используя fread, fseek я не добился коректной работы. Пардон
man1
Отправлено: 28 Февраля, 2014 - 23:35:53
Новичок
Покинул форум
Сообщений всего: 57
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Саня_1991 пишет:
Используя fread, fseek я не добился коректной работы.
И на этом основании ты сделал вывод что это невозможно и стал придумывать монстра на тысячах файлах?
Саня_1991
Отправлено: 28 Февраля, 2014 - 23:38:45
Новичок
Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2014 Откуда: Первомайск Украина
Помог: 0 раз(а)
Если правильно понимаю fread, fseek то там нужно знать длину строки правильно?
man1
Отправлено: 28 Февраля, 2014 - 23:44:35
Новичок
Покинул форум
Сообщений всего: 57
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Саня_1991 пишет:
Если правильно понимаю fread, fseek то там нужно знать длину строки правильно?
Я представляю это так (упрощенно):
my_table.dat - сюда в конец файла записывается строка данных (ограниченной или любой длины, не важно)
my_table.rec - а сюда в конец записывается 20-байтная строчка, первые десять байт содержать позиции начала записи в файле dat, вторые десять длину строки.
Это есть основа, от которой вырастает уже все остальное, потом прирастает система индексирования для быстрого поиска и т.д.
Саня_1991
Отправлено: 28 Февраля, 2014 - 23:48:49
Новичок
Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2014 Откуда: Первомайск Украина
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.