Каковы лучшие практики создания структур баз данных с плоскими файлами в PHP?
Существует множество более зрелых фреймворков для плоских файлов PHP, которые я пытаюсь реализовать с синтаксисом запросов, подобным SQL, который в большинстве случаев является лучшим для моих целей. (Я бы просто использовал базу данных на этом этапе).
Есть ли какие-нибудь изящные приемы, позволяющие получить хорошую производительность и функции с небольшими затратами на код?
for loop
(если я не использую все данные в папке), поэтому он работает намного быстрее, чем база данных. Я бы подробно остановился и дал очень хороший ответ, но, к сожалению, этот вопрос закрыт.Ответы:
Ну какова природа плоских баз данных. Они большие или маленькие. Это простые массивы с массивами в них? если это что-то простое, скажем, профили пользователей, созданные как таковые:
и сохранить или обновить запись базы данных для этого пользователя.
и загрузить запись для пользователя
но, опять же, эта реализация будет зависеть от приложения и характера необходимой вам базы данных.
источник
Вы можете рассмотреть SQLite . Это почти так же просто, как плоские файлы, но вы получаете механизм SQL для запросов. Он также хорошо работает с PHP .
источник
На мой взгляд, использование «базы данных плоских файлов» в том смысле, в котором вы имеете в виду (и ответ, который вы приняли), не обязательно лучший способ действовать. Прежде всего, используя
serialize()
иunserialize()
может вызвать БОЛЬШИЕ головные боли, если кто-то войдет и отредактирует файл (на самом деле, они могут помещать произвольный код в вашу «базу данных» для выполнения каждый раз).Лично я бы сказал - почему бы не заглянуть в будущее? Было так много раз, что у меня были проблемы, потому что я создавал свои собственные «проприетарные» файлы, и проект взорвался до такой степени, что ему нужна база данных, и я думаю: «Вы знаете, я бы хотел Я написал это для начала "базы данных" - потому что рефакторинг кода требует слишком много времени и усилий.
Из этого я узнал, что будущая проверка моего приложения, так что когда оно станет больше, мне не придется тратить дни на рефакторинг, - это путь вперед. Как мне это сделать?
SQLite. Он работает как база данных, использует SQL и довольно легко перейти на mySQL (особенно, если вы используете абстрактные классы для управления базой данных, как я!)
Фактически, особенно с методом «принятого ответа», он может резко сократить использование памяти вашим приложением (вам не нужно загружать все «ЗАПИСИ» в PHP)
источник
serialize()
может быть очень полезным и для этого. Я думаю, что уловка для создания жизнеспособной системы заключается в том, чтобы найти способ индексировать узлы данных, не убивая себя сложностью.Одна из структур, которую я рассматриваю, - это платформа для ведения блогов. Поскольку практически любое возможное представление данных, которое вы хотели бы, было бы отсортировано по дате, я думал об этой структуре:
Один каталог на узел содержимого:
Поддиректории каждого узла, включая
А также простые текстовые файлы в каталоге узлов для контента до и после рендеринга и т.п.
Это позволило бы простому
glob()
вызову PHP (и, вероятно, обращению массива результатов) запрашивать практически все в структуре содержимого:Вернет пути, включая все статьи с меткой "смешно".
источник
Вот код, который мы используем для Лилины:
Он хранит каждую запись в виде отдельного файла, который, как мы обнаружили, достаточно эффективен для использования (ненужные данные не загружаются и их быстрее сохранять).
источник
Если вы собираетесь использовать плоский файл для сохранения данных, используйте XML для структурирования данных. PHP имеет встроенный анализатор XML .
источник
Если вы хотите, чтобы результат был удобочитаемым, вы также можете использовать этот тип файла:
Таким образом, у вас есть только один файл, вы можете легко отлаживать его (и вручную исправлять), вы можете добавлять поля позже (в конце каждой строки), а код PHP прост (для каждой строки, разделенный в соответствии с |).
Однако недостатком является то, что вы должны анализировать весь файл для поиска чего-либо (если у вас есть миллионы записей, это не нормально), и вы должны обрабатывать разделитель в данных (например, если ник WaR | ordz).
источник
Я написал две простые функции, предназначенные для хранения данных в файле. Вы можете судить сами, пригодится ли это в данном случае. Дело в том, чтобы сохранить переменную php (если это либо массив, строка или объект) в файл.
источник
Это вдохновляет как практическое решение:
https://github.com/mhgolkar/FlatFire.
Он использует несколько стратегий для обработки данных ...
[Скопировано из файла Readme]
Бесплатные, структурированные или смешанные
источник
ИМХО, у вас есть два варианта, если вы хотите избежать домашнего пивоварения:
SQLite
Если вы знакомы с PDO, вы можете установить драйвер PDO, поддерживающий SQLite. Никогда не использовал его, но я много использовал PDO с MySQL. Я собираюсь попробовать это в текущем проекте.
XML
Это делалось много раз для относительно небольших объемов данных. XMLReader - это легкий класс в стиле курсора с упреждающим чтением. SimpleXML упрощает чтение XML-документа в объект, к которому вы можете получить доступ, как и к любому другому экземпляру класса.
источник
Просто укажу на потенциальную проблему с базой данных плоских файлов с этим типом системы:
...и т.д
Проблема в том, что данные ячейки содержат символ "|" или "\ n", данные будут потеряны. Иногда было бы проще разделить на комбинации букв, которые большинство людей не использовали бы.
Например:
Разделитель колонки:
#$% (Shift+345)
Разделитель строк:
^&* (Shift+678)
Текстовый файл:
test data#$%blah blah#$%^&*new row#$%new row data 2
Затем используйте:
explode("#$%", $data); use foreach, the explode again to separate columns
Или что-нибудь в этом роде. Кроме того, я мог бы добавить, что базы данных с плоскими файлами хороши для систем с небольшими объемами данных (например, менее 20 строк), но становятся огромными потребителями памяти для больших баз данных.
источник