Счетчик utm меток

grigori

( ͡° ͜ʖ ͡°)
Команда форума
База нужна хранить пользовательские данные,
это утверждение ложно

а не пихать туда все подряд и схатывать боли с утечкой памяти при serialize и unserialize если начнем до кучи хранить объекты и какие-то нереальные комбинации и конструкции, нагородить огород и окунуться в бездну.
в общем случае с распространенными базами serialize и unserialize не используются, хранить объекты удобно в json

var_export - это очень быстрое решение.
Ко всему еще и режим APC сможем задействовать.
Чего не будет работать в memcache и во многих других кешерах.
А require с опкешером очень любят такие файлики.
эти утверждения ошибочны

чтобы записывать и редактировать такого рода массивы, уже не только var_export потребуется, но и написать ArrayDumper на основе данных, которые будут содержаться в ключах и значениях массива.
это утверждение ошибочно

То есть метод export и import.
в массивах не бывает методов

Я не призываю использовать массивы в качестве базы данных.
это технически невозможно, пользовательские массивы исчезают в конце работы скрипта, а immutable arrays по определению не подлежат изменению

Так, что, лучше бд для данных, а логику выкинуть на массивы.
логику нельзя реализовать в массивах, только в функциях и классах
Кому-то проще сделать тонну классов и объектов и думать, что это быстро работает. =)
в общем случае очень большое количество объектов работают быстрее сопоставимого количества массивов
 

Squats

Новичок
При чём здесь объекты и сериализация.
Ну массивы же тоже могут быть и с функциями и с определением объектов.
Конкретная задача - счётчик меток. В случае файлов тебе нужно следить за блокировками, как не терять данные под нагрузкой, чтобы файлик записался, чтобы данные не застряли в буфере или файловом кэше. БД такие вещи умеют из коробки.
Я понимаю тебя прекрасно, но автору требуется это через файлы.
Он же уперся изначально, что нет файлом надо, выше глянь =)
Я в принципе и сказал, как самое тогда быстрое решение массивом через файл собирать =)))
Что еще посоветовать =)
NOSQL?=)
 

Squats

Новичок
grigori, это лол, лучше опустить эту тему.
Мы просто не до понимаем друг друга.
Не охота развивать эту тему и терять время.
Пусть использует что хочет =)
 

AmdY

Пью пиво
Команда форума
Я понимаю тебя прекрасно, но автору требуется это через файлы.
Он же уперся изначально, что нет файлом надо, выше глянь =)
Я в принципе и сказал, как самое тогда быстрое решение массивом через файл собирать =)))
Что еще посоветовать =)
NOSQL?=)
С чего ты взял что требуется. Скорее автор не осилил БД и не понимает возможные проблемы при работе с файлами. А ваше решение с var_export вариант ещё хуже, помимо файлового кеша ещё и в опкеш ударитесь.
п.с. При чём реляционная sql база - это тоже плохой вариант, лучше мемкэш, редис и т.д. Они заточены под счётчики.
 

Фанат

oncle terrible
Команда форума
База нужна хранить пользовательские данные, а не пихать туда все подряд и схатывать боли с утечкой памяти при serialize и unserialize если начнем до кучи хранить объекты и какие-то нереальные комбинации и конструкции, нагородить огород и окунуться в бездну.
Так как массивы которые хранят в себе объекты и каллбеки, у нас вряд ли получится записать без сериализации этих данных, чтобы их записать можно было строкой.
var_export - это очень быстрое решение.
Ко всему еще и режим APC сможем задействовать.
Чего не будет работать в memcache и во многих других кешерах.
А require с опкешером очень любят такие файлики.
Но, чтобы записывать и редактировать такого рода массивы, уже не только var_export потребуется, но и написать ArrayDumper на основе данных, которые будут содержаться в ключах и значениях массива.
То есть метод export и import.
Я не призываю использовать массивы в качестве базы данных.
Лучше так не делать, если будут большие объемы, лучше хранить в бд.
А не писать phpbase =)
Так, что, лучше бд для данных, а логику выкинуть на массивы.
При этому у нас не будет огромных каких-то не реальных массивов, у нас будет лишь структура храниться которую мы получили из базы.
некий роутер, чтобы использовать в виде динамической или статической структуры массива, а также отдельно по частям если это function() {}.
Кому-то проще сделать тонну классов и объектов и думать, что это быстро работает. =)
Гриша, вот тут ты неправ.
Этот шедевр нельзя разбирать по одной строчке, он прекрасен именно своей законченностью.
Я бы решил что это пишет AI, если бы не провел так много времени на этом форуме.
Товарищь честно выложил всё красивые слова, которые краем уха слышал от разработчиков.
 

Valick

Новичок
При чём реляционная sql база - это тоже плохой вариант
Реляционная база данных - это лучший вариант для счётчиков. Как только начнётся не просто "тупое хранить", а обработка данных по всем этим счётчикам на уровне БД. Плюсом сюда еще и то, что придётся таки хранить данные в нормальных формах (законы уже написаны и их даже не надо придумывать), а не устраивать вакханалию с кучей костылей на уровне РНР.
 

AmdY

Пью пиво
Команда форума
Реляционная база данных - это лучший вариант для счётчиков. Как только начнётся не просто "тупое хранить", а обработка данных по всем этим счётчикам на уровне БД. Плюсом сюда еще и то, что придётся таки хранить данные в нормальных формах (законы уже написаны и их даже не надо придумывать), а не устраивать вакханалию с кучей костылей на уровне РНР.
ClickHouse вышел из чата.
 

Valick

Новичок
Посмотреть вложение Снимок экрана от 2021-12-16 20-23-29.png

1 и 3 пункты - это не про счётчики
"... это фиаско братан"
как сейчас помню когда в MySQL добавили триггеры и это стало жутко модно
особенно козыряли этим те кто не умел в SQL
под каждую задачу необходимо выбирать соответствующие инструменты
 
Последнее редактирование:

AmdY

Пью пиво
Команда форума
Посмотреть вложение 1553

1 и 3 пункты - это не про счётчики
"... это фиаско братан"
как сейчас помню когда в MySQL добавили триггеры и это стало жутко модно
особенно козыряли этим те кто не умел в SQL
под каждую задачу необходимо выбирать соответствующие инструменты
ClickHouse был не про счётчики, а про анализ данных. Не надо мешать всё в кучу и искать серебряную пулю.

Счётчик - это получение предудущего значение и его изменение. Мемкэш и редис с этим прекрасно справляются и имеют специальные встроенные механизмы. Ты используешь их для счётчиков, аккумулируешь данные, и порциями складываешь в системы удобные для хранение связанных данных и отчётов. Потому что обычные реляционки или же кликхаус не очень хорошо себя чувствуют, когда ты их одновременно насилуешь на запись и чтение.
Современный инструментарий настолько удобно, что нет проблемы держать одновременно разные СУБД, а не расставлять костыли и получать проблемы по мере роста проекта.
 

Valick

Новичок
AmdY, вот зачем это человеку который собирается кодить "на файлах", а ему говорят возьми "базу данных" и не мучайся. А ты хочешь вывалить на его весь стек "современного инструментария", да еще и начиная с "преждевременной оптимизации". У человека на данный момент нет ещё даже кода, не то что сумасшедшей нагрузки. Ну а за грамотную архитектуру без костылей, при которой с ростом нагрузки и репликацию и буфер с пучком редиски и еще много чего интересного можно воткнуть, я за обеими руками.
Но повторюсь зачем это человеку который "Привет, мир" и тот пишет с тремя ошибками в слове мир?
 

AmdY

Пью пиво
Команда форума
AmdY, вот зачем это человеку который собирается кодить "на файлах", а ему говорят возьми "базу данных" и не мучайся. А ты хочешь вывалить на его весь стек "современного инструментария", да еще и начиная с "преждевременной оптимизации". У человека на данный момент нет ещё даже кода, не то что сумасшедшей нагрузки. Ну а за грамотную архитектуру без костылей, при которой с ростом нагрузки и репликацию и буфер с пучком редиски и еще много чего интересного можно воткнуть, я за обеими руками.
Но повторюсь зачем это человеку который "Привет, мир" и тот пишет с тремя ошибками в слове мир?
Вы последнее предложение читали? Нынче подцепить редис в проект на порядок проще, чем реализовывать без опыта счётчик на файлах.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Но повторюсь зачем это человеку который "Привет, мир" и тот пишет с тремя ошибками в слове мир?
этот сайт - форум, а не twitter, публичное обсуждение, а не диалог, пишется не для ТС, а для всех будущих читателей

Не надо мешать всё в кучу и искать серебряную пулю.
😁 не мешай
Счётчик - это получение предудущего значение и его изменение. Мемкэш и редис с этим прекрасно справляются и имеют специальные встроенные механизмы.
Не-а :) там просто нету того, что мешает.
обычные реляционки или же кликхаус не очень хорошо себя чувствуют, когда ты их одновременно насилуешь на запись и чтение.
И вот это смешивание в кучу некорректно.
"Не очень хорошо" выполняется модификация данных, когда ее надо исполнять одновременно в нескольких потоках, с гарантированной фиксацией на общем медленном жестком диске, и без риска race condition - ACID.
У redis и memcached вообще нет такой задачи. Они тупо однопоточные, с данными в оперативке.
Убери запись на медленный диск, индексы, партицируй таблицу, настрой буферы под запись, и mysql полетит.
В цем, конечно, redis поставить проще, чем настроить mysql :)

Современный инструментарий настолько удобно, что нет проблемы держать одновременно разные СУБД, а не расставлять костыли и получать проблемы по мере роста проекта.
Держать - нет проблем, а обслуживать, обновлять, бекапить, деплоить обновления - есть 😀
 

Squats

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

SQL:
SELECT `s1`.`type`, COUNT(DISTINCT `s1`.`id`) AS `count`
FROM `stats`
AS `s1`
LEFT JOIN `stats`
AS `s2`
ON `s1`.`type` = `s2`.`type`
WHERE `s1`.`status`=1
GROUP BY `s1`.`type`
Когда в табличке разные типы которые нужно посчитать в 1 заход.
Ко всему их там может быть тьма.

Чтобы итог, получился:
Код:
a    113343
b    16255
c    83426
....
Данные постоянно меняются, нельзя допустить, чтобы они задерживались в счетчиках по минутам и часам.
Данные то записываются в базу, все как нужно, пухнет на глазах, только с каждым временем начинает все медленнее и медленнее отдавать результат.
 

Фанат

oncle terrible
Команда форума
Данные то записываются в базу, все как нужно, пухнет на глазах, только с каждым временем начинает все медленнее и медленнее отдавать результат.
Это, как я понимаю, пример неправильного подхода?
А какой правильный?
 

ksnk

прохожий
А про автора топика кто-нибудь еще помнит? :) Не я не против, почитать прикольно, но автор явно еще до баз не дошел и ему нужно так как он умеет. Без всякого страшного sql'я. Не говоря о редисках с меемкэшами
 
Сверху