Реклама на сайте Advertise with us

Проблемы при использовании текстовых файлов вместо СУБД?

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 04/10/17 в 19:12       Ответить с цитатойцитата 

Есть задумка простенького проекта. У проекта есть простейшая форма регистрации пользователей. Из данныйх только: емейл, хеш пароля, имя, числовое поле. Никаких сортировок и особых выборок не требуется. Запись в файл будет предохранятся php локом, т.е. насколько я знаю два юзера одновременно не вызовут конфликта, просто попадут в очередь на запись.
Пусть в эту импровизированую базу попадёт 50 тысяч записей (4-5Mib). Какие проблемы могут быть при использовании подобного подхода в сравнении с SQL, noSQL базами?

2
 



С нами с 31.08.17
Сообщения: 33
Рейтинг: 4

Ссылка на сообщениеДобавлено: 05/10/17 в 08:10       Ответить с цитатойцитата 

S_Flash писал:
Есть задумка простенького проекта. У проекта есть простейшая форма регистрации пользователей. Из данныйх только: емейл, хеш пароля, имя, числовое поле. Никаких сортировок и особых выборок не требуется. Запись в файл будет предохранятся php локом, т.е. насколько я знаю два юзера одновременно не вызовут конфликта, просто попадут в очередь на запись.
Пусть в эту импровизированую базу попадёт 50 тысяч записей (4-5Mib). Какие проблемы могут быть при использовании подобного подхода в сравнении с SQL, noSQL базами?

вопрос в том сколько запросов сразу будет, у меня когда-то один олень сдела sqlite и все просто упало. Решение использовать key-value бд (c переносом в файл?).

9
 



С нами с 09.08.12
Сообщения: 185
Рейтинг: 378

Ссылка на сообщениеДобавлено: 05/10/17 в 08:41       Ответить с цитатойцитата 

никаких проблем - т.к. все
nosql БД работают по этому принципу "добавление новой записи в файл" и выдерживают высокие нагрузки.

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

Код: [развернуть]


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

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

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

10
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 05/10/17 в 13:36       Ответить с цитатойцитата 

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

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


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

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

1
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 05/10/17 в 14:55       Ответить с цитатойцитата 

rickdeckard писал:

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


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

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

9
 

Web Developer С++

С нами с 25.11.01
Сообщения: 859
Рейтинг: 759

Ссылка на сообщениеДобавлено: 05/10/17 в 16:50       Ответить с цитатойцитата 

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

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


Что-то не так делали, постоянно использую локи, не замечал таких проблем.
В FreeBSD есть особенность - надо открывать файл на r+ иначе LOCK_EX не сработает.

Софт для вебмастеров, криптобот, программинг (C++/PHP), партнерка: https://dfservice.com/ru/

9
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 05/10/17 в 19:09       Ответить с цитатойцитата 

почему вас так тянет эта задрочка с файлами?
Ну возьми ты sqlite и делай через пдо запросы
http://php.net/manual/ru/ref.pdo-sqlite.php

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

1
 

Web Developer С++

С нами с 25.11.01
Сообщения: 859
Рейтинг: 759

Ссылка на сообщениеДобавлено: 05/10/17 в 22:11       Ответить с цитатойцитата 


Для каждой задачи надо применять свои методы, для этой файлы самое оно - 10 строк кода.
Конечно можно и в mysql или sqlite фигачить, с классами всё оформить, раскидать по куче файлов - как любят делать крутые программисты! Нафига только - как из пушки по воробьям.

Софт для вебмастеров, криптобот, программинг (C++/PHP), партнерка: https://dfservice.com/ru/

8
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 05/10/17 в 22:16       Ответить с цитатойцитата 

Ailk: универсальность

1
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 06/10/17 в 02:19       Ответить с цитатойцитата 

DF™ писал:
Для каждой задачи надо применять свои методы, для этой файлы самое оно - 10 строк кода.
Конечно можно и в mysql или sqlite фигачить, с классами всё оформить, раскидать по куче файлов - как любят делать крутые программисты! Нафига только - как из пушки по воробьям.
sqlite это 1 строка кода(подключение), при этом это ровно теже самые файлы. Еще аргументы?

6
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 06/10/17 в 08:03       Ответить с цитатойцитата 

Ailk писал:
sqlite это 1 строка кода(подключение), при этом это ровно теже самые файлы. Еще аргументы?


страшно же, да и не везде есть sqlite, а вдруг в консль понадобится лезть инсталить, да и бд в файле в plain/text привычнее и понятнее школьнику trollface.png

4
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 06/10/17 в 08:38       Ответить с цитатойцитата 

Действительно. Ради 50к записей мускул еще тянуть smail101.gif
А вдруг он тоже не везде есть? icon_eek.gif

И почему кстати не сделать 1 табличку в мускуле? Ему(мускулу) это вообще никак не помешает и никакой нагрузки не создаст. Это ж тоже файлы, просто не в папочке сайта.

0
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 06/10/17 в 08:46       Ответить с цитатойцитата 

ibiz писал:
а вдруг в консль понадобится лезть инсталить, да и бд в файле в plain/text привычнее и понятнее школьнику

Да! Да! И тут ты прав! Я, к примеру, именно такой "школьник", не повод для гордости, но я за несколько лет работы с ПХП, только сейчас стал изучать базы данных, причем даже от части рад, т.к. на данный момент есть PDO.
Быть "школьником" с такими знаниями не стыдно! smail101.gif

1
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 06/10/17 в 08:50       Ответить с цитатойцитата 

Ailk писал:
И почему кстати не сделать 1 табличку в мускуле?

С файлами, я сам себе phpMyAdmin icon_razz.gif

1
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 06/10/17 в 09:37       Ответить с цитатойцитата 

Lexikon писал:
т.к. на данный момент есть PDO.

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

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

S_Flash говорит не хочет лишних зависимостей. Щас эти зависимости упаковывают в контейнеры вообще trollface.png
https://ru.wikipedia.org/wiki/Docker

0
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 06/10/17 в 09:47       Ответить с цитатойцитата 

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

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

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

Я ни в одной книге не встретил даже упоминания об этом PDO, за mysqli пишут. Да и вообще во многих видеокурсах, наверное в основной массе, вообще о PDO не упоминают.

0
 
+


С нами с 09.05.17
Сообщения: 661
Рейтинг: 586


Передовик Master-X (01.08.2017) Передовик Master-X (01.02.2018) Передовик Master-X (16.10.2019) Передовик Master-X (01.11.2019)
Ссылка на сообщениеДобавлено: 06/10/17 в 09:58       Ответить с цитатойцитата 

Ailk: какой докер, ты что? посмотри какие вопросы у специалистов пишуших на php по несколько лет. там git то с трудом заходит, а докер так вообще что-то инопланетное smail101.gif


про best practices тут вообще никто не слышал походу, каждый считает себя умнее всех, будут делать по своему, на файлах. была бы возможность, на перфокартах бы хранили данные, печаль что их сейчас не достанешь нигде... trollface.png

Покупаем пуш траффик
GoPusher 2 - рули своими пуш подписчиками

1
 



С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365

Ссылка на сообщениеДобавлено: 06/10/17 в 10:24       Ответить с цитатойцитата 

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().

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 06/10/17 в 12:11       Ответить с цитатойцитата 

по сути спор о методах и "правильности" работы - это спор ниочем, каждый дрочет (в пределах своей квартиры), как он хочет smail101.gif
лично я не могу слезть с HeidiSQL со времен виндов иногда захожу, чтоб базу редактнуть по быстрому
но при этом от своих работников в обязательном порядке требую использовать Workbench для стандартизации хотябы внутри команды и таких мелочей много trollface.png
комфорт одних кончается там, где начинается комфорт других smail101.gif

0
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 06/10/17 в 18:09       Ответить с цитатойцитата 

Oswell E. Spencer писал:
каждый считает себя умнее всех, будут делать по своему, на файлах. была бы возможность, на перфокартах бы хранили данные, печаль что их сейчас не достанешь нигде...

Пользователи скрипта не хотят привязываться к MySQL или sqlite. При чём тут разработчик? Чем хуже, если они скопировали директорию с проектом и она уже работает без прописывания конфигов и создания базы?

0
 
+


С нами с 09.05.17
Сообщения: 661
Рейтинг: 586


Передовик Master-X (01.08.2017) Передовик Master-X (01.02.2018) Передовик Master-X (16.10.2019) Передовик Master-X (01.11.2019)
Ссылка на сообщениеДобавлено: 06/10/17 в 18:15       Ответить с цитатойцитата 

S_Flash писал:
Чем хуже, если они скопировали директорию с проектом и она уже работает без прописывания конфигов и создания базы?


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

sqlite / pdo sqlite доступны в php нормальных версий по умолчанию.

Покупаем пуш траффик
GoPusher 2 - рули своими пуш подписчиками

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 06/10/17 в 19:41       Ответить с цитатойцитата 

S_Flash писал:
Пользователи скрипта не хотят привязываться к MySQL или sqlite.

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

Как мне кажется, эти люди не хотят привязываться к конкретным реализациям, оставляя право выбора клиента\разработчика на свое усмотрение. Это, заметь, не тоже самое, что отказаться от всего вообще. Буддийские монахи в мире пхп smail101.gif

1
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 06/10/17 в 20:03       Ответить с цитатойцитата 

Oswell E. Spencer писал:
sqlite так и работает как раз

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


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

Тут есть доля правды, если выбор реализации обучловлен наличием в системе определённой лицензии и возможности использовать то или другоек решение, девопса по конкретной технологии, который будет её поддерживать.
В случае с фалвыми базами всё уже универсально, если сервер не рабоате на магнитных лентах.

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 06/10/17 в 20:22       Ответить с цитатойцитата 

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

Многим например пхп категорически не нравится. Надо альтернативу на питоне. Или ноде. А вдруг они заядлые рубисты? icon_mad.gif

7
 

127.0.0.1

С нами с 26.04.06
Сообщения: 1092
Рейтинг: 557

Ссылка на сообщениеДобавлено: 08/10/17 в 20:11       Ответить с цитатойцитата 

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

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

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

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

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

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

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

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

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

2
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »