Задать вопрос
  • Дописать в файл json и прочесть его php?

    @Vitsliputsli
    Immortal_pony, для интеграции с внешними системами лучше подготовить API, а не подстраивать свое хранилище под них и позволять им напрямую лазить в него.
    Товарищи склоняющие к CSV вместо json исходят из того, что так им привычнее. Только вот сейчас 2022 и формировать отдельные строчки в логе как json это нормальная, обычная практика, и как софт уже может формировать в таком виде логи, так и системы организации логов, тот же logstash могут читать их.
    А учитывая, что автор пишет построчно, а при чтении готов читать только часть, ту которая последняя после ротации файла, то на мой взгляд писать лог отдельными строками внутри которых json - самый оптимальный вариант.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, вопрос в том, что стоит в BETWEEN, если возможно, то лучше чтобы там стоял id, если это невозможно, то по тому полю, которое в BETWEEN должен быть построен индекс.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, вот эта штука:
    (BETWEEN 1 AND 50000, BETWEEN 50000 AND 100000 и так далее).
    делается циклом for в php, и не нужно множество файлов.

    К четвертому require_once скорость опять упала до черепашьей

    Здесь нужно понимать, что вы запрашиваете, а может и как обрабатываете.
    Скорее всего, как я уже писал:
    Если используете BETWEEN и блоки, то вероятно идете по полю без индекса, из-за этого при каждой итерации он перечитывает всю таблицу сначала до нужной позиции. Используйте primary key в between, либо стройте индекс по фильтруемому полю.
  • Полнотекстовый поиск PostgreSQL внутри JSON, индекс внутри JSON?

    @Vitsliputsli
    rPman, ну т.е. под закачиком понималось лицо ответственное за компонент с основной базой данной. Тогда да, либо договариваться с этим лицом, либо дублировать у себя базу в том виде, в каком она будет соответствовать требованиям, опять же если это допустимо политикой.
  • Полнотекстовый поиск PostgreSQL внутри JSON, индекс внутри JSON?

    @Vitsliputsli
    rPman,
    я понимаю, существуют задачи (выдуманные) когда заказчик хочет чтобы база данных - это железобетонно

    Можете пояснить? Как заказчик связан с технической реализацией?
    А если вдруг он решает все вопросы по технической реализации, то тогда и проблемы с ней надо адресовать ему.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy,
    Но остановилось, сделав где-то 2/3 от общего объёма.

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

    Мысль пришла в файле сделать последовательно три копии этого же файла. В первой с помощью BETWEEN прописать первую треть, во второй - вторую, в третьей - третью.

    ну хоть так, если не знаете, как сделать такой цикл в коде.

    Вот только надо понять, что МЕЖДУ этими копиями прописать. Может, тот же самый sleep...

    да ничего не надо, уж между запусками 3 скриптов точно ничего не надо.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, надо понимать что делают sql запросы (да и php тоже). При простом добавлении данных сильной деградации быть не должно.
    Если используете BETWEEN и блоки, то вероятно идете по полю без индекса, из-за этого при каждой итерации он перечитывает всю таблицу сначала до нужной позиции. Используйте primary key в between, либо стройте индекс по фильтруемому полю.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, не усложняйте раньше времени, не заморачивайтесь ни sleep, ни блоками, запустите ваш скрипт для начала просто в cli, проверьте отрабатывает ли он там.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, sleep никак не поможет вам с 504 ошибкой nginx, если вы про это.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, nginx ни с чем не справляется, он просто ждет определенное время и если не получил ответ от php выдает эту злосчастную ошибку. А php продолжает в это время работать, как и mysql.
    Для вашей задачи nginx вообще не к месту, а запустить скрипт php из консоли в данном случае проще, чем делать это через веб.
    Блоки нужны для другой цели, чтобы СУБД не повесилась от огромного кол-ва работы которую вы на нее взвалили. Чтобы другие процессы могли ей пользоваться свободно, пока идут такие крупные чтения/вставки. Троттлинг, sleep, который "ставит выполнение php на паузу" тоже для этих целей. Поэтому размер блоков и величину троттлинга нужно подбирать экспериментально.
  • Имитация ООП в C, где ошибка?

    @Vitsliputsli
    Василий Дёмин, я думаю автору вариант с костылями тоже подойдёт. Как минимум, чтобы посмотреть какие вообще могут быть варианты. Так что кидайте их, всем будет интересно.
  • Дописать в файл json и прочесть его php?

    @Vitsliputsli
    SteepNET, бд не панацея, которая спасёт от всего и вся. Если речь про 10Мб в год, то действительно стоит задуматься о том, так ли необходима бд. Тут проще прочитать и записать файл целиком. Опять же, есть sqlite.
    Либо хранить в json отдельные события лога, а писать-читать построчно. А потрошение json и запись отдельных кусков не лучшая идея. Но мало того, что сама идея плохая, она ничего полезного не даёт, если сравнить с записью построчно.
  • Дописать в файл json и прочесть его php?

    @Vitsliputsli
    SteepNET, можно, очевидно просто добавьте символ новой строки при записи.
    Только зачем? Что будет дальше? Комментарии в json?
    Это все превращается, как написал FanatPHP, в "ковыряться грязными ногами в джейсоне".
  • Дописать в файл json и прочесть его php?

    @Vitsliputsli
    Immortal_pony, если вновь записываемые json настолько независимы от предыдущих, что мы предыдущие даже не смотрим, зачем тогда их объединять в один json? Почему бы не писать их отдельными строками? Каждую строку при этом можно будет обрабатывать отдельно. Собственно как это и делается в системах логирования. Смысл расширять дозаписыванием со странными телодвижениями, когда при чтении придется читать все скопом?
    И когда автор запустит свою шайтан-машину и она насоздает записей, через некоторое время он опять придет с новой задачей: не перезаписывая весь файл удалить из json несколько первых объектов.
  • Дописать в файл json и прочесть его php?

    @Vitsliputsli
    Immortal_pony, вообще, то что хочет автор, очень похоже на логирование, а при этом в каком формате будет дозаписываемая строка json, csv или еще что, это как удобнее. Но ломать дозаписывать json решение так себе.
    SteepNET, если вам легче будет работать с json - берите json. Записывать его не намного сложнее, не так уж и много потеряете на генерации json. Но это должны быть независимые json в каждой строке.
  • Как ускорить работу Apache + FastCGI?

    @Vitsliputsli
    sarkisssik, именно так, сколько не купи, всегда будет мало. Поэтому прежде чем докупать процессоры, нужно посмотреть что там крутится на бедной СУБД, что ее так напрягает. Раз она постоянно в таком состоянии, то достаточно посмотреть какие запросы выполняются прямо сейчас и проанализировать для начала их.
  • Дописать в файл json и прочесть его php?

    @Vitsliputsli
    FanatPHP, метафора, конечно, звучная. Но то, что дозаписать json не получится, автор уяснил. Тогда о каком ковырянии json идет речь?
  • Дописать в файл json и прочесть его php?

    @Vitsliputsli
    FanatPHP, он пишет, что "хочет попробовать", пусть пробует. Тем более, дозаписывать логи в файл, вполне себе годное решение.
    Либо пытать автора на предмет решаемой задачи, если есть желающие.
  • Дописать в файл json и прочесть его php?

    @Vitsliputsli
    ThunderCat, он хочет дозаписывать в файл, а не переписывать его целиком каждый раз.
  • Дописать в файл json и прочесть его php?

    @Vitsliputsli
    SteepNET, простой - взять file_get_content, прочитать весь файл в память, потом поделить по переносам строк, но тогда нельзя использовать переносы строк внутри json. Но все это при условии, что весь файл всегда будет помещаться в память. Либо открывать через fopen в режиме 'r' и читать построчно через fgets.
    Дозаписывать - открывая файл через fopen в режиме 'a'.