Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Проблемы при использовании текстовых файлов вместо СУБД?
цитата
04/10/17 в 19:12
 S_Flash
Есть задумка простенького проекта. У проекта есть простейшая форма регистрации пользователей. Из данныйх только: емейл, хеш пароля, имя, числовое поле. Никаких сортировок и особых выборок не требуется. Запись в файл будет предохранятся php локом, т.е. насколько я знаю два юзера одновременно не вызовут конфликта, просто попадут в очередь на запись.
Пусть в эту импровизированую базу попадёт 50 тысяч записей (4-5Mib). Какие проблемы могут быть при использовании подобного подхода в сравнении с SQL, noSQL базами?
цитата
05/10/17 в 08:10
 Чуи
S_Flash писал:
Есть задумка простенького проекта. У проекта есть простейшая форма регистрации пользователей. Из данныйх только: емейл, хеш пароля, имя, числовое поле. Никаких сортировок и особых выборок не требуется. Запись в файл будет предохранятся php локом, т.е. насколько я знаю два юзера одновременно не вызовут конфликта, просто попадут в очередь на запись.
Пусть в эту импровизированую базу попадёт 50 тысяч записей (4-5Mib). Какие проблемы могут быть при использовании подобного подхода в сравнении с SQL, noSQL базами?

вопрос в том сколько запросов сразу будет, у меня когда-то один олень сдела sqlite и все просто упало. Решение использовать key-value бд (c переносом в файл?).
цитата
05/10/17 в 08:41
 rickdeckard
никаких проблем - т.к. все
nosql БД работают по этому принципу "добавление новой записи в файл" и выдерживают высокие нагрузки.

http://php.net/manual/ru/function.file-put-contents.php


file_put_contents($file, $person, FILE_APPEND | LOCK_EX);

главное закрыть доступ по http к этому файлу.

а для чтения периодически делаете копию файла - доступ к которой не блокируется и тем самым обеспечивается высокая скорость доступа для чтения.

в эпоху cgi скриптов на perl - даже целые форумы писали на текстовых файлах и все это прекрасно работало и сейчас работает.
цитата
05/10/17 в 13:36
 S_Flash
rickdeckard писал:
а для чтения периодически делаете копию файла - доступ к которой не блокируется и тем самым обеспечивается высокая скорость доступа для чтения.

О, об этом я не подумал. Реально просто и сердито. Спасибо! smail54.gif


rickdeckard писал:
в эпоху cgi скриптов на perl - даже целые форумы писали на текстовых файлах и все это прекрасно работало и сейчас работает.

Я ж про то же. DTR - целый ротатор на тектсовых файлах. Trade Epert - вобще трейд скрипт на тектовых (я о том, что тапм нагрузка в реалтайме). SCJ, если не использовать редис, тоже кеширует межкроновую стату по кликам вроде в тектовый файл. Вот я и думаю, что для сверх малого проекта есть шанс уйти от лишней зависимости, но сцыкливо ибо тренды моды не те сегодня!
цитата
05/10/17 в 14:55
 Lexikon
rickdeckard писал:

file_put_contents($file, $person, FILE_APPEND | LOCK_EX);[/code]


А на всех ОС работает, у меня локалка на винде, и когда ставил LOCK_EX, один хер в файл использовался и получалось так, что при многократных запросах файл с данными просто превращался в пустой файл.
Для этой цели даже костыль пришлось сделать, другой файл с флагам типа 1 или 0, если т.е. перед записью в файл данных проверялся статус, если 1 закрыто, если 0 то можно. Это не есть гуд, но вот так пришлось сделать.

У меня есть рес, на котором каждая такая запись пишется в отдельный файл, а потом все файлы за 24 часа собираются в один.
цитата
05/10/17 в 16:50
 DF™
Lexikon писал:
А на всех ОС работает, у меня локалка на винде, и когда ставил LOCK_EX, один хер в файл использовался и получалось так, что при многократных запросах файл с данными просто превращался в пустой файл.
Для этой цели даже костыль пришлось сделать, другой файл с флагам типа 1 или 0, если т.е. перед записью в файл данных проверялся статус, если 1 закрыто, если 0 то можно. Это не есть гуд, но вот так пришлось сделать.

У меня есть рес, на котором каждая такая запись пишется в отдельный файл, а потом все файлы за 24 часа собираются в один.


Что-то не так делали, постоянно использую локи, не замечал таких проблем.
В FreeBSD есть особенность - надо открывать файл на r+ иначе LOCK_EX не сработает.
цитата
05/10/17 в 19:09
 Ailk
почему вас так тянет эта задрочка с файлами?
Ну возьми ты sqlite и делай через пдо запросы
http://php.net/manual/ru/ref.pdo-sqlite.php

В крайнем случае перенесешь базу в мускул или куда там, не меняя логику скрипта вообще, а только драйвер пдо изменишь. Вы ж програмисты ептыть.
цитата
05/10/17 в 22:11
 DF™

Для каждой задачи надо применять свои методы, для этой файлы самое оно - 10 строк кода.
Конечно можно и в mysql или sqlite фигачить, с классами всё оформить, раскидать по куче файлов - как любят делать крутые программисты! Нафига только - как из пушки по воробьям.
цитата
05/10/17 в 22:16
 S_Flash
Ailk: универсальность
цитата
06/10/17 в 02:19
 Ailk
DF™ писал:
Для каждой задачи надо применять свои методы, для этой файлы самое оно - 10 строк кода.
Конечно можно и в mysql или sqlite фигачить, с классами всё оформить, раскидать по куче файлов - как любят делать крутые программисты! Нафига только - как из пушки по воробьям.
sqlite это 1 строка кода(подключение), при этом это ровно теже самые файлы. Еще аргументы?
цитата
06/10/17 в 08:03
 ibiz
Ailk писал:
sqlite это 1 строка кода(подключение), при этом это ровно теже самые файлы. Еще аргументы?


страшно же, да и не везде есть sqlite, а вдруг в консль понадобится лезть инсталить, да и бд в файле в plain/text привычнее и понятнее школьнику trollface.png
цитата
06/10/17 в 08:38
 Ailk
Действительно. Ради 50к записей мускул еще тянуть smail101.gif
А вдруг он тоже не везде есть? icon_eek.gif

И почему кстати не сделать 1 табличку в мускуле? Ему(мускулу) это вообще никак не помешает и никакой нагрузки не создаст. Это ж тоже файлы, просто не в папочке сайта.
цитата
06/10/17 в 08:46
 Lexikon
ibiz писал:
а вдруг в консль понадобится лезть инсталить, да и бд в файле в plain/text привычнее и понятнее школьнику

Да! Да! И тут ты прав! Я, к примеру, именно такой "школьник", не повод для гордости, но я за несколько лет работы с ПХП, только сейчас стал изучать базы данных, причем даже от части рад, т.к. на данный момент есть PDO.
Быть "школьником" с такими знаниями не стыдно! smail101.gif
цитата
06/10/17 в 08:50
 Lexikon
Ailk писал:
И почему кстати не сделать 1 табличку в мускуле?

С файлами, я сам себе phpMyAdmin icon_razz.gif
цитата
06/10/17 в 09:37
 Ailk
Lexikon писал:
т.к. на данный момент есть PDO.

Пдо уже больше 10 лет icon_smile.gif
Lexikon писал:
Быть "школьником" с такими знаниями не стыдно! smail101.gif

да конечно не стыдно. В рамках обучения вполне норм пилить на файлах. Но когда планируешь рабочий сайт для людей... нынче это уже как-то странно выглядит.

S_Flash говорит не хочет лишних зависимостей. Щас эти зависимости упаковывают в контейнеры вообще trollface.png
https://ru.wikipedia.org/wiki/Docker
цитата
06/10/17 в 09:47
 Lexikon
Ailk писал:
Но когда планируешь рабочий сайт для людей... нынче это уже как-то странно выглядит.

Тут бесспорно. smail54.gif

Ailk писал:
Пдо уже больше 10 лет icon_smile.gif

Я ни в одной книге не встретил даже упоминания об этом PDO, за mysqli пишут. Да и вообще во многих видеокурсах, наверное в основной массе, вообще о PDO не упоминают.
цитата
06/10/17 в 09:58
 Oswell E. Spencer
Ailk: какой докер, ты что? посмотри какие вопросы у специалистов пишуших на php по несколько лет. там git то с трудом заходит, а докер так вообще что-то инопланетное smail101.gif


про best practices тут вообще никто не слышал походу, каждый считает себя умнее всех, будут делать по своему, на файлах. была бы возможность, на перфокартах бы хранили данные, печаль что их сейчас не достанешь нигде... trollface.png
цитата
06/10/17 в 10:24
 Mika
DF™ писал:
Для каждой задачи надо применять свои методы, для этой файлы самое оно - 10 строк кода.

Ну да, поэтому при необходимости забить гвозди стоит взять готовый молоток, а не пытаться смастерить его самому (разве что в образовательных целях).

DF™ писал:
Конечно можно и в mysql или sqlite фигачить

Некорректно ставить на одну ступень СУБД enterprise-класса (mysql) и embedded (sqlite). Последний как раз таки и служит в частности заменой собственных файловых велосипедов.
http://sqlite.org/whentouse.html
Цитата:
SQLite does not compete with client/server databases. SQLite competes with fopen().
цитата
06/10/17 в 12:11
 ibiz
по сути спор о методах и "правильности" работы - это спор ниочем, каждый дрочет (в пределах своей квартиры), как он хочет smail101.gif
лично я не могу слезть с HeidiSQL со времен виндов иногда захожу, чтоб базу редактнуть по быстрому
но при этом от своих работников в обязательном порядке требую использовать Workbench для стандартизации хотябы внутри команды и таких мелочей много trollface.png
комфорт одних кончается там, где начинается комфорт других smail101.gif
цитата
06/10/17 в 18:09
 S_Flash
Oswell E. Spencer писал:
каждый считает себя умнее всех, будут делать по своему, на файлах. была бы возможность, на перфокартах бы хранили данные, печаль что их сейчас не достанешь нигде...

Пользователи скрипта не хотят привязываться к MySQL или sqlite. При чём тут разработчик? Чем хуже, если они скопировали директорию с проектом и она уже работает без прописывания конфигов и создания базы?
цитата
06/10/17 в 18:15
 Oswell E. Spencer
S_Flash писал:
Чем хуже, если они скопировали директорию с проектом и она уже работает без прописывания конфигов и создания базы?


sqlite так и работает как раз.

sqlite / pdo sqlite доступны в php нормальных версий по умолчанию.
цитата
06/10/17 в 19:41
 Ailk
S_Flash писал:
Пользователи скрипта не хотят привязываться к MySQL или sqlite.

А к файлам хотят? smail101.gif
Как думаешь, почему люди придумывают всякие PDO, DBAL'ы и прочие абстракции?
Откуда взяли все эти PSR'ы? http://www.php-fig.org/psr/ (3, 6, 7, да и остальные с интерфейсами)

Как мне кажется, эти люди не хотят привязываться к конкретным реализациям, оставляя право выбора клиента\разработчика на свое усмотрение. Это, заметь, не тоже самое, что отказаться от всего вообще. Буддийские монахи в мире пхп smail101.gif
цитата
06/10/17 в 20:03
 S_Flash
Oswell E. Spencer писал:
sqlite так и работает как раз

sqlite - это модуль, другое дело если он стоит по дефолту в 90% сборок php.
Опять же файлы тоже работают как и этот модуль, только без прослойки.


Ailk писал:
Как думаешь, почему люди придумывают всякие PDO, DBAL'ы и прочие абстракции?

Тут есть доля правды, если выбор реализации обучловлен наличием в системе определённой лицензии и возможности использовать то или другоек решение, девопса по конкретной технологии, который будет её поддерживать.
В случае с фалвыми базами всё уже универсально, если сервер не рабоате на магнитных лентах.
цитата
06/10/17 в 20:22
 Ailk
Ну тогда стоит наверное писать еще и кросплатформенного клиента до кучи. + делать поддержку всех языков на свете, для пущей универсальности.

Многим например пхп категорически не нравится. Надо альтернативу на питоне. Или ноде. А вдруг они заядлые рубисты? icon_mad.gif
цитата
08/10/17 в 20:11
 localhost
я делал подобную реализацию лет ндацть назад.
типо база данных для постов + генерируемые комменты.
все хранилось в текстовом файле. каждой записи выдавался блок на N байт
таким образом по номеру записи можно вычислить смещение откуда читать блок размером N байт

для ускорения можно сделать хэш на все записи, тупо поблочно (размер 20байт) записать все смещения в файле.
Это все работает норм, если:
1) не нужно читать-писать в базу слишком часто
2) не нужно делать хитровыебанные выборки

значит, если просто тупо писать в текстовый файл строки типа:
логин;пароль;емейл;размер_хуя;телефон

то через 100к записей примерно все начнет тормозить.
почему? потому что нужно открыть файл, прочитать все строки, найти искомое значение, считать

чтобы такой херни не было, нужно под каждую запись давать фиксированный размер блока, скажем
255 байт на одну строчку + перевод строки (ну чтоб визуально удобно смотреть)

далее, чтобы поиск по файлу был быстрее, нужно писать в начало строки типа такого:
логин.....;емейл.....;пароль......;какая-то другая инфа если надо.... - то есть первыен три записи строго фиксированного размера, скажем 64 байта каждая (остаток добивается пробелами

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

все это начнет ощутимо тормозить либо на трафе, либо при размере от 1м строк
почему БД лучше? там реализованы все этим механизмы, что привел выше более грамотно и быстрее.

если нужно только читать из файла конкретный блок (по номеру записи скажем) - там хоть 1м записей можно держать, будет работать быстро, пока файл умещается в файловый кеш линукса.
если нужен поиск, тогда будет тормозить. если есть хороший траф, будет тормозить ощутимее.
Стр. 1, 2  >  последняя »


Эта страница в полной версии