В связи с переходом на новый движок... возможны сбои в работе! Простите!
Работы производятся прямо сейчас 28-04-2024! ×
Меню :


Blog (1411)
php (331)
js (244)
html (147)
css (131)
html tags (62)
js tag (56)
jquery (42)
text (37)
js method (36)
js date (33)
php array (33)
form html (30)
online (29)
fonts (26)
Показать еще :
ruweb.net (25)
foto (22)
php file (20)
atom (20)
forum (19)
input (18)
svg (18)
hosting (17)
php date (17)
php time (16)
info (16)
html book (16)
board (16)
color (15)
js url (14)
js events (14)
js time (14)
img (14)
знак (13)
osclass (13)
select (13)
notepad (13)
htaccess (13)
table (12)
dw block (12)
download (12)
keyboard (12)
php path (12)
php img (12)
form (11)
icon (11)
jsphp (11)
keyframes (10)
yandex (10)
js delete (10)
vs code (10)
mouse (10)
chart (9)
dosite (9)
hover (9)
browser (8)
php post (7)
comment (7)
php url (7)
list (6)
canvas (6)
mysql (6)
php get (6)
click (6)
iframe (6)
adminka (6)
year (5)
reg.ru (5)
js id (5)
ftp (5)
mb (5)
tag a (5)
heading (5)
value (5)
js math (5)
month (4)
base64 (4)
bbcode (4)
day (4)
submit (4)
pages (4)
week (4)
ssl (4)
js form (4)
php var (4)
console (4)
scandir (4)
task (4)
vk (4)
games (4)
нок (4)
xml (4)
symbols (4)
domen (3)
ucoz (3)
money (3)
jquery post (3)
https (3)
js img (3)
padding (3)
js post (3)
куб (3)
line (3)
js hash (3)
numbers (3)
captcha (3)
qr kod (2)
seo (2)
js vars (2)
prompt (2)
counter (2)
details (2)
height (2)
video (2)
youtube (2)
sitemap (2)
tag hr (2)
typeof (2)
рся (2)
google (2)
arrows (2)
cursor (1)
нод (1)
rutube (1)
windows (1)
archive (1)
scroll (1)
jino (1)
smile (1)
speed (1)

База данных в файле

"Файл вместо базы данных", как использовать файл вместо базы данных! Вообще... вместо того, чтобы придумывать заново велосипед, то вы можете использовать готовые движки на файлах.

Это мой собственный велосипед - которым я пользуюсь уже 11 лет.

Я мало знаю, как работают другие базы данных и даже другие движки на файлах - мне это просто не нужно - я сторонник необходимых знаний!

Файл как база данных

  1. Файл вместо базы данных.
  2. Зачем база в файле!?
  3. Формат файла базы, запись/получение данных!?
  4. Что такое "$page_id"?
  5. Главная проблема файла, как базы данных.
    1. Что за проблема с файлами базы?
    2. Пример файла базы в 15 МБ.
    3. Пример обработки файла базы в 15 МБ.
    4. Почему данная проблема актуальная для меня частично?
    5. Как решить проблему файла базы?
  6. Живой пример: база данных в файле.
  7. Построчно(предыдущий вариант.)
  8. Скачать

  1. Файл вместо базы данных.

    Вообще предыдущая версия данной страницы называлась "File or MySQL - Файл вместо базы данных" - это было верно отчасти! О предыдущей странице.

    "File or MySQL - Файл вместо базы данных.

    На данной странице я даже ставить такой вопрос и выбор не буду - это вы сами должны разобраться и решить самостоятельно! Лишь скажу, что у всякой медали две стороны!

    Введение!

    Давайте разберемся в понятиях!

    То, что я называю базой данной в файле таковой является только частично!

    Весь контент хранится в файле.

    А так называемая "база" - это ассоциативный массив в отдельном файле.

    Пример ячейки массива (на одну страницу) базы данных:

    Выведем через print_r :

    print_r($main_array[$id_md5]) ;

    Array

    (

    [title] => База данных в файле

    [text] => Текст для главной?

    [data] => 28.04.2024

    [img] => engine.png

    [url] => baza_dannyih_v_fayle.html

    [tags] => file_cms/

    )

    Где используется этот файл базы?

    Использование этого массива вы можете посмотреть:

    Все страницы : "https://dwweb.ru/blog.html". Эта же страница:

    Списком: https://dwweb.ru/?spisok=blog.

    Сортировать по возрастанию : https://dwweb.ru/?spisok=blog&sort=up.

    Сортировать по убыванию: https://dwweb.ru/?spisok=blog&sort=down.

    Страница "темы", всё что начинается с get "tema=" : https://dwweb.ru/?tema=php.

    Также все типы сортировок, что перечислены выше для "blog.html".

    Страницы поиска : https://dwweb.ru/?search=Файл+вместо+базы.


  2. Зачем база в файле!?

    Естественно, что вы должны задать вопрос:

    Зачем? У меня есть история на этот вопрос:

    Если вы хотите прочитать сразу "ИТОГО" - см. здесь.


    Несколько случаев... из реальной жизни:

    №1). Первый раз, когда я задумался.

    В начале пути, мне потребовался "html editor", ну для примерно вот такой, для редактирования страниц, которые уже существуют у меня на сайте.

    Мой собственный html editor попал кусочком вот здесь в видео.

    Причем здесь это?

    Дело в том, что когда я скачал и установил подобный "html editor" - вы не поверите!

    В нем было:

    3200 файлов

    Что они все там делали мне до сих пор непонятно!

    Мой "html editor" уместился в 1 файле!!! №2). В следующий раз, когда я опять задумался...

    Когда-то у меня был сайт на движке osclass - было настолько странное впечатление... и я задавал вопрос... нахрена так все сложно?

    Складывалось такое ощущение, что собралось несколько программистов, которым была поставлена задача максимально сделать код непонятным!

    Какие-то совершенно элементарные задачи решались так сложно, что я даже вспоминать не хочу!

    Например создание "xml" карты... это был вообще какой-то треш!

    Я даже с теми "нулевыми" знаниями понимал, что делается всё настолько просто... что не понимал нафига в движке такая порнуха...

    №3). Итого :

    Выше я привел два ярких отрицательных моих опыта и было ещё несколько, которые меня привели к идеи "ФИКС" :

    Сделать свой собственный движок!

    Поскольку с самого начала я использовал простые "html страницы" - они остались как идея хранения контента с некоторыми усовершенствованиями - здесь смысл такой: зачем менять то, что уже и так нормально работает?

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


  3. Формат файла базы, запись/получение данных!?

    Какой формат выбрать для хранения базы в файле?

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

    Я использую формат файла для базы:

    .dat

    Краткая информация о странице будет хранится в ассоциативном массиве? пример ячейки массива для данной страницы была выведена здесь.

    Далее нам нужно разобраться... в двух процессах : сохранение и получения данных.

    1). Как записать данные базы в файл?

    Не буду подробно останавливаться на вопросе записи - потому, что это отдельная тема, только тезисно:

    Если файл уже существует... его нужно получить в переменную( далее "$m_a" - $main_array ) file_get_contents.

    Поскольку в файле "сериализованный массив", то его нужно вернуть в массив с помощью unserialize.

    Создаем новую ячейку массива, например:

    $page_id = '204f390a8ca6c2d5e00fd18f8c72863d';

    $m_a[$page_id]['title'] = 'База данных в файле';

    $m_a[$page_id]['text'] = 'Текст для главной?'; //необязательно - здесь можно дать некоторые подробности о странице - если нужно...

    $m_a[$page_id]['data'] = date('d.m.Y');

    $m_a[$page_id]['img'] = 'engine.png';

    $m_a[$page_id]['url'] = 'baza_dannyih_v_fayle.html';

    $m_a[$page_id]['tags'] = 'file_cms/';

    Для записи ассоциативного массива, нужна строка, поэтому используем serialize.

    Для записи в файл нам нужна функция file_put_contents.

    Одновременно создаем страницу с контентом.

    И записываем краткую информацию о странице в файл базы!

    2). Как получить данные из базы в файле?

    Для получения данных из файла базы данных нам нужна функция file_get_contents - мы получили строку...

    Строку надо вернуть в массив с помощью : unserialize


  4. Что такое "$page_id"

    Выше вы встречали "$page_id" - что это такое?

    $page_id или $id_page - как вам нравится - это уникальный идентификатор страницы подробнее здесь.

    Но страница еще не существует!!!

    Откуда взять ссылку страницы, если она еще не создана?

    Рассмотрим на примере данной страницы.

    У вас должна существовать форма form для ввода данных.

    Одно из полей input, например name = title :

    <input type="text" name="title">

    Получаем с помощью post всю ячейку смотри выше...:

    if($_POST['title']){ $m_a[$page_id]['title'] = $_POST['title'] ; }

    Создание "$page_id"

    Получили данные из поля ввода "title" выведем с помощью echo $_POST['title']; получим:

    База данных в файле

    Функция транслита ru_to_en, echo ru_to_en($_POST['title']); смотрим:

    Baza_dannyih_v_fayle

    Приводим к строчным буквам собственная функция my_strtolower - зачем собственная функция а не встроенная strtolower?:

    baza_dannyih_v_fayle

    Добавляем разрешение...(мне нравятся страницы по ОЛДскульному... чтобы было разрешение... ".html"):

    baza_dannyih_v_fayle.html

    Пропускаем через md5 ... ну вот и получили ваш "$page_id" :

    204f390a8ca6c2d5e00fd18f8c72863d

    Соберем весь код "$page_id":

    if($_POST['title'])

    {

    $page_id =

    md5(

    my_strtolower (

    ru_to_en($_POST['title']) ) ) .html) ;


    1. Главная проблема файла, как базы данных.

      Как у любой медали есть две стороны, так и у файла есть положительные и отрицательные стороны!

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

      И вот на момент написания(переписывания) статьи она уже наступила частично!


    2. Главная проблема файла - это "ВЕС"!

      Вес файла не может быть бесконечным!

      В php есть ограничение на размер файла! Этот параметр можно изменить.

      Но... она актуальна только для страниц - где он файл участвует, например :

      Страница blog.html и аналогичных.

      И для поиска, когда во время поиска используется база в файле.

      Для страниц с контентом она никак не влияет!(естественно я рассказываю о своей структуре сайта на файлах).

      Когда возникнет проблема с файлом базы?

      Данная проблема возникает в двух случаях, при выводе всех страниц в одном месте при загрузке:

      Страница списка - https://dwweb.ru/blog.html.

      Страница поиска - https://dwweb.ru/?search=Файл+вместо+базы.


    3. Пример файла базы в 15 МБ.

      Я провел некоторые изыскания, поскольку я должен знать, что меня ждет впереди...

      В примере файла базы заносился лишь "$page_id" - "идентификационный номер страницы".

      Записаны в одну строку.

      С разделителем : *.

      Вы можете посмотреть на этот файл:

      В нем подсчитаем сколько "$page_id" с помощью : echo, count, explode, file_get_contents.

      echo count (explode('*', file_get_contents ( 'путь/example.dat') ) );

      Получим... количество "page_id"

      500001

      Вес файла:

      Размер файла : 15.735626220703 мб

    4. Пример обработки файла базы в 15 МБ/

      С файлом в 15 МБ выше вы уже познакомились... теперь давайте:

      Выведем все "ID" через цикл, чтобы посмотреть... как это будет...

      Конечно... довольно странно выводить 500 000 в одном месте за 1 раз, но тем не менее:

      <?

      $t_arr = explode('*', file_get_contents ($home .'/__a-data/__all_for_scripts/__examples/php/file_base/example.dat'));

      $new_echo = count ( $t_arr ) ;

      if($_GET[example]=='1')

      {

      for ($i=0; $i < $new_echo ; $i++) {

      echo $t_arr[$i]. '<br>';

      }

      exit;

      }

      ?>

      Смотрим - да загружается довольно долго, но опять же повторюсь, что странно выводить все 500 000 страниц в одно месте... человек если осилит пролистать 10 строк, то ему уже нужно поставить памятник!

      Теперь давайте попробуем вывести 30 страниц, как вот на этой странице.

      Файл базы будет загружаться полностью, но в цикле ограничим вывод в 30 строк...

      for ($i=0; $i < 30 ; $i++) {

      Смотрим - здесь никакой проблемы вы не долны увидеть, поскольку её здесь нет wall смайлы


    5. Почему данная проблема актуальная для меня частично?

      Для всего списка - эта проблема ещё неизвестно когда возникнет. Посмотрите на странице... blog - нужно пуститься в самый низ - там есть скорость загрузки страницы... она будет колебаться в пределах 0.2 - 0.3 секунды, это отличный результат!

      А вот с поиском... уже на момент написания статьи есть проблема... скорость поиска желает оставлять лучшего! Проверь сам.

      Для справки состояние моего файла базы:

      Вес моей базы данных в реальном времени :

      0.51111793518066 мб

      Количество страниц:

      1411

    6. Как решить проблему файла базы?

      О выводе всех страниц в одном месте:

      Итак... выше вы уже видели примерный вариант решения проблемы большого файла базы(в пример 15 МБ) - это вывод не всего файла ( напоминаю! ), а лишь его части. Вы можете его скачать - чтобы проверить действительно ли он весит 15 МБ.

      Вообще... вы должны себя спросить... а уж так ли вам нужно выводить все страницы в одном месте?

      Ну посмотреть... как ранжируются страницы по посещаемости... ещё для чего?

      Короче...

      Для меня в данный момент - это не актуально, как только эта проблема станет актуальной... примусь её решать!

      О странице поиска.

      Решение этой проблемы займусь уже скоро... Могу только предположить:

      Отправлять запрос одновременно и сразу 3 или более штуки с помощью javascript.

      Каждый из запросов будет обрабатывать только часть массива...


  5. Живой пример: база данных в файле.

    Всю теорию, которую изложил выше, вы можете скачать в готовом виде! Скачиваем архив здесь.

    Как работает пример записи в базу данных в файле?

    Закидываем в любую папку на сайте.

    Открываем файл "do_base.php" в браузере... вы должны увидеть форму, в данном примере - только две формы... скрипт сделан для понимания процесса... вы можете добавить сколь угодно полей...:

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

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

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

  6. Построчно(предыдущий вариант.)

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

    Здесь было несколько пунктов об использовании построчной записи/хранения данных через разделитель, только через некоторое время я узнал, что такой способ хранения используют в файлах csv.

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

    Почему неудобна?

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

    В файле "csv":

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

    Поэтому, так делать нельзя(о предыдущем абзаце), вам придется вводить эти данные в какую-то уже существующую ячейку... и соответствующим образом потом её от туда доставать...

    Постепенно, ваш файл "csv" превращается в огромную кучу писанины, в которой ты ничего не можешь понять!

    В ассоциативном массиве:

    Делаем так:

    $main_arr['новый параметр']= 'значение';
Не стесняемся говорить спасибо!
Помочь проекту DwWeb.ru

Поделиться ссылкой! C друзьями или врагами!

Этим вы очень поможете проекту! Заранее огромное спасибо!

Теги:
Ещё : dwweb.ru есть здесь:
ruweb
Все статьи авторские, при копироавании активная ссылка обязательна DwWeb.ru! © 2015 - 2024 Контакты. Реклама на сайте Лучший хостинг : RUWEB + помощь по RUWEB
Страница загружена за : 0.356319 секунд. Подробнее