[/b/] [/d/] [/tu/] [/a/] [/ph/] [/wa/] [/cg/] [/t/] [/p/]

[Burichan] [Foliant] [Futaba] [Greenhell] [Gurochan] [Photon] - [Home] [Manage] [Archive]

[Return]
Posting mode: Reply
Leave these fields empty (spam trap):
Name
Link
Subject
Comment
File
Verification
Password (for post and file deletion)
  • Supported file types are: GIF, JPG, PDF, PNG
  • Maximum file size allowed is 20480 KB.
  • Images greater than 200x200 pixels will be thumbnailed.

File: 1530925414070.jpg -(79953 B, 600x800) Thumbnail displayed, click image for full size.
79953 No.155258  

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

в кратце суть проблемы - с некого объекта снимается некая метрика и пишется в базу в духе datetime, value

нужно строить график. с успехом припахал google chart

с выбором субд не заморачивался - mysql

задача строить график в разных масштабах. сжимать и разжимать оптически множество данных гугл чартс умеет прекрасно, дело не в этом, а в том, что когда таймфреймы станут реально огромными, в духе данные за год, а точки каждые 10с, то браузер станет колом

по-этому задача по сути очень простая, но я не знаю как её решить. нужно выбирать точки в духе 1 через 9, 1 через 99, 1 через n. при том желательно, очень желательно, что бы если выбирается один через 99, то не просто выбирать, а усреднить сто и вернуть одну точку, но это уж совсем лакшери, на такое не уповаю

сейчас я знаешь как делаю? будешь смеяться, нагуглил: select datetime,value from stats where crc32(datetime) % "+div+" = 0;

div - делитель. то есть остаток от деления чексуммы, понимаешь? если делишь на 10, то статистически одна из десяти чексумм поделится без остатка лол. понятно что не про какое усреднение тут речи не идёт и вообще сэмплы идут не очень равномерно. в прицнипе достигается уменьшение количества данных попадающих в браузер, но было бы здорово сделать их более гладкими.

кстати, если ты хочешь рассказать мне что я лох и надо nosql сюда, то расскажи, я в принципе не против и если реально очень надо - то еще в принципе не поздно

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

>> No.155259  

Лучше Python+pandas или R используй.

https://pandas.pydata.org/pandas-docs/stable/timeseries.html

>> No.155260  

>>155258
1) 10с за год это порядка 3M значений, не так уж и много чтобы поставить колом браузер. Если есть проблемы с производительностью то можешь попробовать hicharts. Я сейчас в порядке эксперемента засунул туда 5М точек, он это прожевал секунд за 5 и потом весьма шустренько вертел. Правда там датасет получился порядка 67мб.
2) Ты можешь усреднять данные уже в браузере на этапе напихивания в график при выборе больших интервалов.
3) Без усреднения, каждый n-й, предпологается что интервал 10с - что-то вроде select datetime,value from stats where unix_timestamp(datetime) div 10 % n = 0;
4) С усреднением, группами по n, интервал 10с - select datetime,avg(value) from (select datetime, value, unix_timestamp(datetime) div (n * 10) as 'gtime') as T group by gtime; но подозреваю что на больших датасетах поплохеет уже серверу.
5) В принципе ты можешь усреднять каждые n значений на том языке, на котором обрабатываешь ответы sql. Скорее всего это будет работать быстрей запроса из п4.

>> No.155261  

>>155258
Данные хранишь, как id, datetime, value. Потом делаешь что-то вроде select (id / 100) as n, min(datetime), avg(value) group by n. Синтаксис я не проверял, но суть ты, надеюсь, понял. В (id / 100) деление должно быть, естественно, целочисленным, не уверен, как это в MySQL делается, сам найди и проверь. Про разные агрегирующие функции можешь прочитать здесь: https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html. Извиняюсь за неровный почерк, мне пора отправляться делать оясуми.

>> No.155262  
File: 1530939570888.jpg -(56717 B, 640x437) Thumbnail displayed, click image for full size.
56717

>>155259
но он же делает всё кроме того что мне надо? выбрать одно значение из ста и даже устредить сто точек - это же пандас не нужен, разве нет?

>>155260

>проблемы с производительностью

проблемы пока нет, но когда она появится решить её будет намного сложнее, чем сейчас

>hicharts

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

>Ты можешь усреднять данные уже в браузере на этапе напихивания в график при выборе больших интервалов.

ну это JS знать надо. на JS я программировать наверное могу, но это будет три гугл-запроса на один символ кода.

>value from stats where unix_timestamp(datetime) div 10 % n = 0;

блин, а ведь ты прав. так ровнее, хотя с crc32 как-то смешнее получалось

>select datetime,avg(value) from (select datetime, value, unix_timestamp(datetime) div (n * 10) as 'gtime') as T group by gtime;

а вот это не работает

>select datetime, value, unix_timestamp(datetime) div (n * 10) as 'gtime'

даже вот эта часть работать не желает, потому что

>ERROR 1054 (42S22): Unknown column 'datetime' in 'field list'

с той же ошибкой вылетает и полная версия запроса. я бы может и поправил, если бы понимал как это работает, но стоит ли разбираться, если

> ты можешь усреднять каждые n значений на том языке, на котором обрабатываешь ответы sql. Скорее всего это будет работать быстрей запроса из п4.

питон вроде как не отличается скоростью, но для меня это, конечно, проще

>> No.155263  

>>155262

> проблемы пока нет, но когда она появится решить её будет намного сложнее, чем сейчас

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

> дело как бы вот в чём. везде стоит хайчартс, но он платный(разве нет?)

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

> ну это JS знать надо. на JS я программировать наверное могу, но это будет три гугл-запроса на один символ кода.

Но тебе все равно нужно как-то вытащить данные с сервера и запихнуть в график, так что без гуглзапросов по js не обойтись в любом случае.

> ERROR 1054 (42S22): Unknown column 'datetime' in 'field list'

Ну так в твоем примере поле с временем называется datetime, поменяй его на актуальное значение, если его реальное название отличается.

> питон вроде как не отличается скоростью, но для меня это, конечно, проще

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

>> No.155264  

Оп, а расскажи чем история с майнингом закончилась. Сектроанализатор достали? Сбои устранили? Ты в жаббер вообще не заходишь теперь?

>> No.155276  

А зачем отображать 3М точек? Вы что?
Просто масштабируйте, на год отложить масштаб 1:1000 точек и вот уже не 3М а 3К. При приближении детализировать датасет таймфрейма, всё.

>> No.155318  
File: 1531148852061.jpg -(67784 B, 597x518) Thumbnail displayed, click image for full size.
67784
>>>155263
>Нагенерь нужное количество рандомных данных да посмотри, как эта вся конструкция будет себя вести на полной загрузке.

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

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

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

>Но тебе все равно нужно как-то вытащить данные с сервера и запихнуть в график, так что без гуглзапросов по js не обойтись в любом случае.

да, но эти запросы уже сделаны и всё работает

>Ну так в твоем примере поле с временем называется datetime, поменяй его на актуальное значение, если его реальное название отличается.

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

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

это да, но эскюэл позволяет хуяк-хуяк и в продакшн и если ничего не упирается в производительность, то и сойдёт

>>155264

>Оп, а расскажи чем история с майнингом закончилась. Сектроанализатор достали? Сбои устранили? Ты в жаббер вообще не заходишь теперь?

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

>>155276

>Просто масштабируйте, на год отложить масштаб 1:1000 точек и вот уже не 3М а 3К.

именно это я и хотел бы сделать, а сюда я пришёл за нюансами реализации. хотя бы на каком уровне сделать слой манипулирующий данными таким образом и какими средствами

>> No.155319  

>>155318

> да, но эти запросы уже сделаны и всё рттает

Тогда тебе достаточно просто немного доработать напильником то, что уже есть.

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

Подозреваю где-то все-таки ошибся или забыл, потому что ругается оно у тебя именно на неизвестное поле. У меня этот запрос работал.

>> No.155387  
File: 1531419761249.jpg -(207279 B, 1080x1080) Thumbnail displayed, click image for full size.
207279

>>155319

>Тогда тебе достаточно просто немного доработать напильником то, что уже есть.

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

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

>Сектроанализатор достали? Сбои устранили?

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

>> No.155388  

>>155387

> как усреднить сразу два параметра

Что-то вроде
select datetime,avg(value),avg(anothervalue) from (select datetime, value, anothervalue, unix_timestamp(datetime) div (n * 10) as 'gtime') as T group by gtime;

>> No.155389  
File: 1531421681776.jpg -(47780 B, 604x483) Thumbnail displayed, click image for full size.
47780

>>155388
вот так не пробовал. а что такое "Т"?

>> No.155390  

>>155389
Имя временной таблицы в которую складывается результат подзапроса.

>> No.155470  
File: 1531741250966.jpg -(82012 B, 600x600) Thumbnail displayed, click image for full size.
82012

>>155388
настал понедельник и я вернулся к этому вопросу, вот это вот заработало:
"select time,ifnull(temp_min,0),ifnull(temp_max,0) from (select time,temp_min,temp_max,unix_timestamp(time) div ("+div+" * 10) as 'gtime' from stats where rig_id='"+rig_id+"' and time >= ( curdate() - interval "+div+" day)) as T group by gtime;

то есть да, в целом всё верно, благодарю за рецепт

(ну ты понимаешь, там всунуты переменные из кода конкатенацией строк)

помните, кстати, постил картинку про сердечный приступ в конце прошлого треда?

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

я могу гордиться настоящим сердечным приступом и скоро умру, скажи, анон?

>> No.155471  

>>155470

> я могу гордиться настоящим сердечным приступом и скоро умру, скажи, анон?

Сходи к врачу.

>> No.155473  
File: 1531744580967.jpg -(315015 B, 700x659) Thumbnail displayed, click image for full size.
315015
>я могу гордиться настоящим сердечным приступом и скоро умру, скажи, анон?

У меня тоже такое было, причем далеко не в 30 а если уж так то ближе к 20, причем я понял что это за херня только после того как через некоторое время случайно увидел информационную картинку в интернетах. Еще руку не поднимал и ощущение в руке были будто много мелких иголок.
Еще отдача в спину может свидетельствовать о косяках в лёгких, например что лёгкое сдулось у хуям, это тоже из своего опыта.

>> No.155474  

>>155470
Я в таких случаях через боль вдыхаю полной грудью. Помогает.

>> No.155485  

>>155473
У тебя невралгия. От сердечного приступа окочуриться можно, и требуется скорая медицинская помощь, а просто боль - это нервы.

>> No.155496  

>>155485
Там были еще кучи симптомов о которых я не написал, так что скорее нет чем да.



Delete Post []
Password

[/b/] [/d/] [/tu/] [/a/] [/ph/] [/wa/] [/cg/] [/t/] [/p/]