169 похожих чатов

Привет, ребят, подскажите как делать, хотя вопрос и арихитектурный, но

проект на ларавел.

Итак, у меня есть 3 таблички, в них данные пишут джобы, данных много: сотни тысяч, будут десятки миллионов строк,
в табличках хранится статистика, например какой товар, когда заказали, когда за него перевели деньги и кто, на каких складах он сейчас есть (движения по складу) из этой статистики можно считать процент выкупов (отношение всех заказов к выдачам товаров) и прочее прочее.
те хранятся "сырые данные" из которых нужные бизнесу графики собираются..


так вот встала задача сделать большую отчетную таблицу, пока конечно не большую, но все же, мне нужно вывести процент успешных продаж (отношение заказов к выдачам) все эти данные есть в этих 3ех табличках.
Я набросал метод который получает данные, на пыхе считает, выводит, метод большой и запросы даже на тестовых данных тяжелые (индексы есть) что же будет когда будет выборка из 10 млн... думаю упрусь в memeory_limit..

Вообще мне нужен текущий процент и за последние 3месяца (за каждый из 3ех месяцев), щас я просто их считаю на пыхе (могу на sql перебросить) но для этго мне нужно получить ну прям очень много строк и сделать эту математику (100% переброшу на sql с агрегатными функциями сегодня), но даже на sql... зайдет 10 клиентов одновременно у каждого по 2млн строк, нормально ли шерстить это все "на живую", в голове крутится идея какого-то кеша, те считать эту таблицу где-то в фоне и из кеша уже показывать людям.

Вопрос, какие инструменты и подходы для этого есть? (редис не подойдет, он больше для горячих данных.., тут же в mysqlскладывать, кажется старнным, я конеччно не DB-ninga, но слышал про какие-то хранимые процедуры, но особо не понял зачем, про view table (хотя не уверен о их наличии в mysql)...
Вобщем путей решния вроде как несколько, но не могу выбрать верный, подскажите пожалуйста. (как бы делали вы)

13 ответов

12 просмотров

Может стоит такую обработку переложить на mysql сервер? Процедуры, функции..

поднимите рядом инстанс в копией БД и делайте отчеты на не. Отчеты обычно не нужны в реалтайме

Александр-Панков Автор вопроса
Vitaliy
поднимите рядом инстанс в копией БД и делайте отче...

Нифигасебе, спасибо, а это решение хорошее, оно как сферический конь или реально где-то используется? Но опять же… придет 100 клиентов и тот инстанс бд так же будет ворочать милиионами строк, это норм.. отвалится он тогда, вот и все, разве нет?

Александр Панков
Нифигасебе, спасибо, а это решение хорошее, оно к...

надо ли вам сырые данные в mysql сразу писать ? при innoDB - оно 4 раза диск будет дергать, только чтобы сделать insert . Есть Кликхаус для всякого шлака начального

Александр-Панков Автор вопроса
Vitaliy
надо ли вам сырые данные в mysql сразу писать ? пр...

Хороший вопрос, а почему 4 раза на инскрт, расскажите пожалуйста?

Александр-Панков Автор вопроса
PSYTRGLES
посмотри кликхаус под такую задачу

Я смотрел, дело в том что данные не просто мне летят и я сохраняю, там есть логика обновления, а на сколько погуглил и кликхауса с обновлением строк беда

Александр Панков
Хороший вопрос, а почему 4 раза на инскрт, расскаж...

было на какой то конференции. Запись в лог, в кэш, мб неявная транзации , запись в БД ... тут помню что 4 раза, там не помню

Александр-Панков Автор вопроса
PSYTRGLES
да

Может какие-то триггеры в бд можно использовать, вот гуглю но пока не понимаю как их прикрутить, или это вообще я не туда ушел?

Александр Панков
Может какие-то триггеры в бд можно использовать, в...

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

Александр-Панков Автор вопроса

Вот да, а где их хранят обычно? Тут же в базе?

Александр Панков
Вот да, а где их хранят обычно? Тут же в базе?

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

Похожие вопросы

Обсуждают сегодня

А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
57
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Карта сайта