0
<< предыдущая заметкаследующая заметка >>
29 сентября 2021
А вот кто шарит в MySQL?

Совет нужен. Имеется таблица актуальных сущностей типа MEMORY для торчания в памяти. В таблице раз в несколько секунд кратко отмечаются некие сущности — например девайсы. Или посетители сайта. Если такая сущность в таблице была, обновляется только время посещения, иначе создается новая запись. Раз в минуту приходит смотреть таблицу стационарный скрипт cron и удаляет всё, что не обновлялось последние 10 минут. А теперь вопрос:



Вот схожая таблица посетителей:



Не дохера ли великие индексы и объемы данных у таблицы, в которой живёт 12 (во втором случае 48) сущностей? Откуда там мегабайты? Или это похоже на ошибку отображения? Или это накапливаются какие-то индексы, которые тоже имеет смысл периодически дропать и пересоздавать?

PS: Кстати про UDP — я почти разобрался и почти написал на чистом С крошечный UDP-сервер для девайсов, чтобы они его пингали по UDP вхолостую, а если такое случилось, что есть для них сообщения в базе, то о том будет ответ UDP, и тогда пусть уж бегут и забирают по TCP. Простенько, минимальная нагрузка на сервер и девайсы, даже AES думаю не привинчивать. Как доделаю, опубликую код, может, кому пригодится.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок

Комментарии к этой заметке скрываются - они будут видны только вам и мне.

Оставить комментарий
Linux Firefox
 Пенза
0
0
qwerty блинн которого сайт забыл
движок у базы какой?
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
MariaDB. Или вы имеете в виду тип таблицы? MEMORY, я не написал.
Mac Safari Chrome
 Fremont
0
0
Евгений_another
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Вопрос про движок таблиц - innoDB или MyISAM
SHOW TABLE STATUS FROM `database` LIKE 'tablename';
Windows Firefox
 Москва
0
0
Сергей Яковлев
ENGINE: MEMORY ;-)
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Memory
Linux Firefox
 Пенза
0
0
qwerty блинн которого сайт забыл
http://www.rldp.ru/mysql/mysql80/storage.htm#memory-storage-[...]

?
перевод правда кривой но заклинания верные
Linux Firefox
 Пенза
0
0
qwerty блинн которого сайт забыл
блинн, слона то я и не приметил :(
с движком мемори не работал.
может какую редиску применить? или не хочется плодить сущности?
Windows Safari Chrome
 Домодедово
9
0
id
Борьба с разрастанием индексов - периодическая переиндексация. Но я сейчас одну совсем неканоничную вещь скажу: если у тебя всего 12 сущностей в таблице, просто не используй индексы вообще.
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Ну сегодня их 12 а завтра 1800, хочу уметь решения, не костыли.

А какой командой делается переиндексация?
Windows Firefox
 Украина
0
0
Fisher12345
К сожалению, в современном мире, решения - это прежде всего дать современным обжорливым монстрикам достаточное количество диска и памяти; а если им мало - дать еще.

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

Если такое случается, срочно исправляют ситуацию тем, что покупают ORACLE.
Linux Safari Chrome
 Москва
1
0
Леонит Каганофф
Речь сейчас идёт об одной строке кода, какие затраты на софт?

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

Например, тот же udp-сервер я делал на чистом С. Хотя мог бы повесить nodejs и сожрать кучу ресурсов.
Windows Firefox
 Russia Moscowa Tverskaya-Yamskaya1
0
0
Johny2
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
в 2021 принято экономить энергопотребление автономного гаджета , а не ресурсы серверной стороны.
Windows Firefox
 Украина
6
0
Fisher12345
Если вы уж используете какой-то современный софт вроде MySQL, то вы должны быть готовы, что он откушает пару лишних мегабайт, а то и десятков, "просто так, на всякий случай".

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

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

Ну и третий конец этой палки - если вы захотите нанять помощника в сопровождение этой штуки, специалиста по MySQL вы найдете бесплатно, хотя бы и в виде советов в этом блоге. А для сопровождения самоделки на чистом С придется тащить кому-то ящик пива.
Linux Safari Chrome
 Эстония
1
0
Christian Archer
Проектирование индексов всегда подстраивается под объемы. Это крайне протекающая абстракция, ее нельзя решить нормально для общего случая

1800 в memory с короткими кортежами, кстати, тоже могут обойтись без индексов вполне
Windows Safari Chrome
 Киев
0
0
Кондыбас
Индексы подстраиваются под запросы. Т.е. из логической структуры базы физическая ее структура (включая индексы) не следует вообще никак. Забавно, что у К.Дж.Дейты на тыщестраничный талмуд индексы поминаются в одном-единственном абзаце.
Mac Safari
 Kirkland
1
0
Андрей57745
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Пока их там не будет десятки тысяч, индекс даже использоваться не будет. Смотри планы запросов.
Windows Firefox
 Израиль
0
0
Serg33
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
в мускуль оптимизация делается с помощью команды analyze table tablename. работает лучше чем optimize
Windows Firefox
 Москва
1
0
Сергей Яковлев
Думаю, для этого типа таблицы и с таким количеством строк дополнительные индексы, кроме PRIMARY, не требуются.

И да, происходит фрагментация таблицы. Время от времени можешь делать:

OPTIMIZE TABLE `table_name`;

Да хоть тем же крон-скриптом, сразу после удаления устаревших записей.
Windows Safari Chrome
 Киев
2
0
Кондыбас
OPTIMIZE TABLE не работает с MEMORY движком, увы. Но зато всегда можно сделать
CREATE TABLE x SELECT * FROM y;
DROP TABLE y;
RENAME TABLE x TO y;
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
А если в этот момент пойдут данные?

Спасибо, это наверно для моей ситуации самый эффективный совет.
Windows Safari Chrome
 Киев
0
0
Кондыбас
Можно сделать такой финт ушами:

LOCK TABLE memtab WRITE; -- никому другому ни писать, ни читать из нее
CREATE TABLE newmemtab SELECT * FROM memtab;
RENAME memtab TO oldmemtab, newmemtab TO memtab; -- атомарная операция, как бы единомоментно два переименования.
UNLOCK TABLES;
DROP TABLE oldmemtab;
Windows Firefox
 Russia Moscowa Tverskaya-Yamskaya1
0
0
Johny2
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
и что же будет с подвисшими запросами ожидающими записи в oldtable? они дропнутся вместе с oldtable?
Windows Safari Chrome
 Санкт-Петербург
0
0
bolshakovdmitry
Через 10 минут они всё-равно будут удалены, так не похуй ли.
Windows Firefox
 Russia Moscowa Tverskaya-Yamskaya1
0
0
Johny2
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
досрочное неожиданное удаление этих записей, это как раз то, с чем вы предлагали бороться добавляя в механизм блокировки.

результат вроде как не достигнут, не?
Windows Firefox
 Украина
0
0
Fisher12345
"Не сохраняли данные - не стоит и начинать".
Windows Firefox
 Санкт-Петербург
0
0
ВД
У меня есть аналогичная задача, хотя и несколько иных масштабов (крупные пакеты данных приходят примерно раз в минуту, общее количество записей нынче достигло десятков миллиардов). Так вот, workflow такой: свежепришедшие данные кэшируются в файловой системе, которая используется в качестве сериализатора (ещё был отдельный квест найти файловую систему без утечек памяти, в итоге так и не нашлась, пришлось изобретать отдельный веник для очистки), а крон периодически медленно спускается с горы и далее по тексту (в смысле, наполняет базу данных, вычищает устаревшее из файлового кэша, формирует отчёты, бэкапит базу и т.д.). Срочные отчёты за период после последнего визита крона делаются не из базы, а прямо из кэша скриптами на авке/перле/шелле, благо данных успевает накопиться немного. В качестве СУБД исторически используется SQLite, как наименее склонная к неконтролируему потреблению памяти в известных сценариях использования, и в то же время достаточно гибкая в смысле изменения форматов отчётов, хотя сейчас я бы, наверное, использовал что-нибудь с column-oriented storage для экономии дискового пространства, занимаемого базой.
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Идея лохматить ресурс SSD, вручную манипулируя файлами, мне не кажется правильной.
Windows Safari Chrome
 Домодедово
0
0
id
noatime у тебя включено надеюсь?

А в остальном, и SQL, и "файлобаза" обращаются к файловой системе, в том числе на запись. И нет, ты не манипулируешь файлами на SSD вручную, ты что-то пишешь в файл, а дальше есть несколько слоев абстракций, в том числе кешируемых.

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

Но даже и так все не так, как ты думаешь: SSD не перезаписывает данные тупо по одному месту, он всегда размазывает новые записи по имеющимся свободным блокам. Просто дай побольше этих самых свободных блоков (оставь на SSD место, не занятое никакими разделами), и вопрос ресурса решен.


P.S. А файловая система-то у тебя какая?
Windows Firefox
 Санкт-Петербург
0
0
ВД
А если придут данные, пусть подождут в неблокируемой структуре вроде очереди. Или дропнутся, если в очереди места не осталось.
Linux Safari Chrome
 Москва
0
1
Леонит Каганофф
Спасибо!
Windows Firefox
 Москва
0
0
Сергей Яковлев
Меня поправили насчёт OPTIMIZE для MEMORY.
Linux Firefox
 Санкт-Петербург
2
0
Nikolay Shaplov
+1

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

Индексы хороши, когда чтение происходит с диска, и мы сначала читаем относительно короткий индекс, ищем по нему и потом читаем ту часть таблицы на которую индекс ссылается.

А у тебя оно не только в памяти, да еще и индекс практически полностью повторяет собой данные таблицы, разве что не упорядоченные... Стоимость упорядочивания для такого кол-ва данных, простите, нулевая.
Linux Safari Chrome
 Швейцария
0
0
Миха23
Мегабиты же вроде.
Windows Safari Chrome
 Киев
0
0
Кондыбас
По порядку.

Примари кей из чар(13), помноженных на 4 (ибо там стопудово utf8mb4, а если нет, то ССЗБ) - это уже 52 фиксированых байта на поле. Плюс еще 11 байт инта - вот уже 63 байта на запись, плюс накладные расходы на бтрее.

А вот два идентичных индекса с разной семантикой - это уже излишество нехорошее. Оптимайзеру насрать на семантику, он смотрит чисто на кардиналити полей.

И мне ОЧЕНЬ не нравится идея хранить тайм в 11-байтовом инте. Родной тип таймстамп - это те же секунды эпохи, экономно хранящиеся в четырех байтах. Но - в УТЦ, что накладывает. Если системное время сервера в утц - то и ладно, но нужно в марию таймзоны загрузить, чтобы клиенту делало автоконверсию в его, клиентскую таймзону.

Мой совет: заменить unit на инт, я б даже сказал на смолл-инт, двух байт для нумерации девайсов хватит очень надолго. Имена девайсов вынести в отдельную табличку и джойнить по unit_id.

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


Как-то так.
Windows Firefox
 Москва
2
0
Сергей Яковлев
Поправочка: int(11) — это и есть 4-байтовый тип, а не 11-байтовый.
Windows Safari Chrome
 Киев
0
0
Кондыбас
Да, точно.
Linux Ubuntu Firefox
 Москва
0
0
Anton_AA
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
«Имена девайсов вынести в отдельную табличку и джойнить по unit_id.» С точки зрения нормализации данных и экономии дискового пространства это, конечно, правильно. Но тогда придётся вести табличку-справочник unit с id и unit_name. И если у клиента отсутствует жёстко прошитый уникальный id (а так оно и есть, скорее всего), то мы получим ряд неприятных проблем.
Во-первых, придётся как-то добавлять туда новые unit-ы, когда от клиента будут приходить соответствующие записи.
Во-вторых, в таблице unit будет копиться мусор (ведь в случае переименования девайса на стороне клиента система не распознает этот случай, а заведёт новую сущность). А если вдруг встретятся два девайса с одинаковыми именами, то вообще будет путаница, т.к. различить их не получится.
В-третьих, при вставке новой записи сначала нужно будет найти её в справочнике unit по названию, определить unit_id и только потом производить вставку. Плюс контролировать корректность unit_id с помощью внешнего ключа. Всё это создаст дополнительную нагрузку на систему.
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Да, это нереальная в данном случае технология, она ничем не оправдана. Сейчас имена девайсов выражаются формулой [0-9a-f]{6}-[0-9a-f]{6} это ровно 13 байт char, и нет совершенно никакого смысла и экономии дискового пространства делать вторую таблицу имён.
Windows Safari Chrome
 Киев
0
0
Кондыбас
Тогда в определении таблицы можно явно прописать, что данное поле имеет чарсет ASCII - уберутся накладные расходы на конверсию однобайтовых символов в четырехбайтовые (или трехбайтовые, что еще недавно было дефолтом)

Выглядит, как крохоборство, конечно, но на вот таких "мелочах" иногда можно расход ресурса радикально сократить.
Windows Firefox
 Москва
0
0
Сергей Яковлев
Да просто удалить дефис и положить 6 байт в поле BINARY, конвертнув по пути средствами MySQL. Собственно, пробел тоже можно удалить средствами MySQL.
Windows Safari Chrome
 Киев
0
0
Кондыбас
Если присмотреться, то там хекс-цифры, [0-9a-f], 12 таких цифирок - это аккурат три байта, медиум-инт.
Windows Firefox
 Москва
0
0
Сергей Яковлев
Я именно это и имел в виду. Но 12 hex-цифр — это таки 6 байт (по 2 цифры на байт).

Ну можно положить не в BINARY, а в BIGINT. По вкусу.
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Насчёт даты в int 11 - это специально. Мрй опыт показывает, что это самое надёжное, быстрое и эффективное хранение даты - числом в INT. Аргументирую:
1) Он полностью избавляет от глюков, связанных с разными таймзонами, переходами на летнее время и прочим говном.
2) С ним удобнее производить математические вычисления, которые в моих проектах обычно связаны с точным промежутком, а не "дайте списки сотрудников по рабочим вторникам".
3) Его проще верифицировать при приеме.
4) Его компактнее отправлять Аяксом клиенту.
5) У клиента вообще неизвестно, какая локальная таймзона.
6) С ним можно строить систему интервалов для записи в базу кольцевых посылок - берутся две даты, округленные каждая по-своему, и проверяется попадание в интервал.
7) Наконец, база с int намного быстрее работает и делает поиск, чем по дате.
Windows Safari Chrome
 Киев
1
0
Кондыбас
"..база с int намного быстрее работает и делает поиск, чем по дате.."

Это не так. Внутреннее представление хронотипов - DATE, DATETIME, TIMESTAMP етц - те же инты, но зато есть множество готовых функций для специфической работы с ними. Сравнения хронотипов больше-меньше-равно (основные расходы при обходе деревьев индексов) выполняются с той же скоростью, что и для интов.

Возможно, это было справедливо в старых версиях, но сейчас все, что имеет внутреннее представление в интах, так же быстро, как и инты.
Linux Safari Chrome
 Москва
1
1
Леонит Каганофф
Возможно. Я правильно понимаю, что по остальным пунктам вы согласны?
Windows Safari Chrome
 Киев
2
0
Кондыбас
Нет, с остальным - о хранении таймстампа в инте - я не согласен.

Хронотипы придумали не случайно. Но для их полноценной работы нужно импортировать данные из системного zoneinfo в системные таблицы. Для этого есть штатный скрипт https://mariadb.com/kb/en/mysql_tzinfo_to_sql/ о существовании которого, кажется, знают единицы.

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

Хотя, конечно, для хоббийного проекта можно делать что угодно, лишь бы пёрло.
Linux Ubuntu Firefox
 Москва
0
1
Леонит Каганофф
Вы так говорите, словно не сталкивались с задачами сложнее, чем SELECT Employers WHERE date = NOW()-1 WEEK

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

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

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

По совету с математиком Ховайко мы решили задачу при помощи двух временных эпох:

$t=time();
$epoch1=$t & ~0x7FF;
$epoch2=($t+0x400) & ~0x7FF;

Эпохи заводились в два уникальных ключа, и при попытки записи дубли отвергались на уровне MySQL, потому что совпадали с одним из ключей:

CREATE TABLE IF NOT EXISTS `kvant` (
[...]
`parcel_num` tinyint(3) unsigned NOT NULL default '0' COMMENT 'кольцевой номер посылки 0-255',
`epoch1` int(10) unsigned NOT NULL default '0' COMMENT 'эпоха 1',
`epoch2` int(10) unsigned NOT NULL default '0' COMMENT 'эпоха 2',
PRIMARY KEY (`i`),
UNIQUE KEY sensor_parcel_epoch1 (`sensor_id`,`parcel_num`,`epoch1`),
UNIQUE KEY sensor_parcel_epoch2 (`sensor_id`,`parcel_num`,`epoch2`),

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

А как сложно и дорого по ресурсам вы бы реализовывали эту логику при помощи datetime? Делали бы предварительное чтение базы с интервалами WHERE datetime < (X + 15 MIN) AND datetime > (X - 15 MIN), заставляя MySQL каждый раз выстраивать в памяти последовательно две миллионные выборки?
Windows Firefox
 Нижний Новгород
0
1
alxumuk2
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Я бы решал проблему ресурсами базы данных, ибо это можно было бы уложить в транзакцию. В вопросах времени проблема полночи и проблема перехода временных зон это пиздец. Плавал, знаю.
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
Ну и как бы вы решали "уложив в транзакцию"?

Повторю задачу:
- есть миллиард записей в базе
- пришла посылка с кольцевым номером 123 и датой отправления 1 января 2019 (черт её знает, где она так долго ходила)
- необходимо записать посылку одним обращением к базе, но только если в районе плюс-минус 10-15 минут от той даты не было посылки с тем же кольцевым номером от того же девайса

Предложите решение ;)
Windows Firefox
 Россия
0
0
Surv
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Если важна скорость, то пишите все что пришло и когда пришло, а потом job-ами анализируйте и подчищайте. И уж если очень сильно важна скорость, то смотрите с сторону mongo (NoSQL).
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Нехороший совет. Дублям посылок не место в базах. NoSQL тоже плохое решение - база событий может быть огромна. Не могу поверить, что вы всё это предлагаете только потому, что вам не нравится использование int. Или вы просто не смогли понять, как проблему мы решили с помощью двух перекрывающих эпох и не смогли оценить красоту этого решения?
Windows Firefox
 Хабаровск
0
0
stream
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Не надо вредных советов. У этих, так сказать, примитивов, полная задница с таймзонами и летним временем. Если на сервере часы идут не по UTC, качественный и долгий альтернативный секс обеспечен. Уж проще unix timestamp в int хранить, его туда-сюда все умеют преобразовывать. Ну и для любителей альтернативного секса никто не отменял FROM_UNIXTIMESTAMP().
Mac Firefox
 Нижний Новгород
0
0
tartaglia
Хранение даты как "unix timestamp", а также, например, представление IPv4-адресов в виде 32-битного числа без знака — самые компактные, понятные, удобные и эффективные форматы хранения. Арифметика дат превращается в простую арифметику, а налагать маску на IP можно побитовой операцией. Это да.

Unix timestamp легко получить из поля-даты с помощью UNIX_TIMESTAMP(), а 32-битный IPv4 получается из текстового с помощью INET_ATON().

Но только если вы не любите руками запускать 'SELECT * FROM' и не рассчитываете видеть при этом внятную картинку, не добавляя всё время FROM_UNIXTIME() и INET_NTOA().

Если же, наоборот, вам нравятся ручные запросы, а остальное не волнует — тогда даты хранятся в datetime, а IPv4 - в текстовом виде.
Windows Firefox
 Нижний Новгород
0
0
alxumuk2
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
У примитивов есть проблемы с таймзонами. Но у доморощенных решений проблемы с таймзонами ничуть не меньше.
Windows Firefox
 Russia Moscowa Tverskaya-Yamskaya1
1
0
Johny2
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
когда я был маленький и глупый, то тоже изобретал велосипеды и все хранил в int.

с тех пор я вырос, отрастил седые яйца и перестал считать что использование готового, кем-то придуманного стандарта для хранения определенного типа данных это обязательно плохо
Windows Firefox
 Санкт-Петербург
1
0
ВД
Кстати, IP-адреса тоже прекрасно ложатся в четырёхбайтные беззнаковые инты.
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
У меня так и сделано.
Скажу более: компактно ложаться в два int и GPS-координаты. Только их надо нормализовать, а ещё меридианы будут точнее, чем параллели, по понятным причинам.
Linux Firefox
 Азербайджан
1
0
морра
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
17 лет примерно осталось :)
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Думаете?
Linux Firefox
 Азербайджан
0
0
морра
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Дык в 2038 вылезет за 32 бита
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Индекса только два - первичный код днвайса и время. Видимо, вводит в заблуждение скриншот моей инсталл-админки, там не дублированные индексы, а мнимая разница, которую движок нашел между описанием таблицы и ее реальностью (как он ее увидел), поэтому он пишет типа как было и как надо. Не обращайте внимания, правильные таблицы и индексы:

unit: char(13) NOT NULL
time: int(11) unsigned NOT NULL default '0'

PRIMARY (`unit`)
`time` (`time`)
Linux Firefox
 Германия
0
0
Igelko
Однажды мне жаловались, что постгресовая in-memory табличка на пару тыщ записей по три чиселки каждая распухает до гигабайта, а тут какие-то два мега - мелочи :-D
Но вообще суть такова, когда делается delete из базы, то по факту запись физически не удаляется, а только метится как ненужная.
потом при вставке нового значения где-то рядом оно запишется на это свободное место.
При update в in-memory тоже происходит похожее, т.к. пока идёт вставка, параллельные юзеры могут делать запросы и должны видеть старую версию, пока апдейт не завершён до конца.

Есть хорошая портянка-обсуждение на английском про фрагментацию.
https://serverfault.com/questions/202000/how-to-find-and-fix[...]
В общем-то да, можно делать пухнущему optimize. Но нужно ли?
Linux Safari Chrome
 Азербайджан
0
0
covidoluh
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Откуда у постгреса взялись im-memory таблицы? O_O
Linux Safari Chrome
 Киев
6
1
па хом
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
пахнет старыми велосипедами
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Не твоя, вот и бесишься.
Linux Safari Chrome
 Киев
0
0
па хом
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
я как-то писал такое для количества просмотров страниц.
юзал мемкеш
и левелдб, писал тесты что быстрее.
деталей уже не помню, сорсы на старом диске лежат

это было во времена популярности носкуэль решений
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
Я писал такое для memcache до 2010 года, в бытность еще на lleo.aha.ru

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

Но было это не долго - почему-то дико грузило сервер. То ли сервер был там совсем слабый. То ли код неоптимизированный - например, я в те годы еще пользовался не своей библиотекой аякса, а какой-то штатной JsHttpRequest.php + JsHttpRequest.js, которые занимали аж 14 и 25 кб соответственно, и чем они там занимались на такую дикую сумму кода - вообще хуй знает. Оосбенно серверная часть - непонятно, зачем вообще она нужна для аякса, аякс прекрасно работает без нее, так что могла тормозить сервер дико. Ну либо посетителей у сайта было в те годы на порядки больше, чем 50 человек в каждые 10 минут.

Короче, я реализовывал это на memcache, но поигрался и вырубил.
Mac Safari
 Санкт-Петербург
0
0
TI_Eugene
А нахрена аж цельный MySQL для аж цельных 48 записей?
Просто глобальный dict (или что там у Вас, язык не указан) - не?
Или файл бинарный.
Или прямо крону повесить задачу прибить запись через x минут/часов.

Хотя на БелАЗе за сигаретами сгонять - вариант, да.
Windows Firefox
 Украина
0
0
Fisher12345
Так а если сигарет не одна пачка, а целый блок нужен?
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Например потому, что это полтора миллиона записей, из которых активны сейчас 48? Вообще я спрашивал авторитетного совета, а не костылей. И не странных в 2021 году советов по убиванию ресурса SSD постоянной перезаписью бинарных файлов, словно БД ещё не придуманы человечеством.
Mac Safari Chrome
 Киев
0
1
Alex Mizrahi
Можно писать файл в /tmp, в большинстве Linux систем это tmpfs, которая существует только в памяти. Так что проблема ресурса SSD решаема. Можно более продвинуто разместить SQLite базу в /tmp.

Но лучше посмотреть в динамике, если через неделю там те же 2 МБ, то наверное движек MEMORY меньше не умеет :)
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Я попробую по советам удалить индексы и посмотреть, что изменилось.
Mac Firefox
 Нижний Новгород
1
0
tartaglia
Не путаете, часом? Не "/dev/shm"?

Мне не попадалось НИ ОДОГО Линукса, где бы "/tmp" монтировался в память.

Во-первых, размер "/tmp" не ограничен какими-то упоминаниями размера оперативной памяти.

Во-вторых, "/tmp" идеологически более-менее стабильный ресурс — он периодически (но не при перезагрузке!) чистится, и не стоит надеяться, что там что-то сохранится надолго, но уж при незапланированной перезагрузке он не пропадает автоматически.
Linux Safari Chrome
 Москва
1
1
Леонит Каганофф
Началооось...
Windows Safari Chrome
 Домодедово
1
0
id
> Мне не попадалось НИ ОДОГО Линукса, где бы "/tmp" монтировался в память.

Armbian, сходу
Mac Firefox
 Нижний Новгород
1
0
tartaglia
Не знаю, что это. Я имел дело с RedHat (ещё в прошлом веке) и его линейкой (Fedora, CentOS), Arch Linux, Ubuntu, SUSE и не помню с чем ещё. FreeBSD, Darwin.

Короче, не знаю, что за обезьян. Вы отстаиваете точку зрения «в большинстве Linux систем это tmpfs»? Или поддерживаете LLeo с его «Началооось...»?

Я искренне надеялся, что LLeo по привычке пёрнул в лужу. Но вашими стараниями он окажется прав. И мы будем спорить из-за какой-то посторонней несущественности, никому не нужной. Причём небрат Alex даже останется не при делах.

Вот зачем вы влезли с претензиями? Неужто нельзя просто промолчать?
Mac Safari
 Домодедово
0
0
ид
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Авторизация по вк как сломалась, так и не работает, так что прикинусь анонимусом. Вы иногда говорите, что вам похуй - то на то, то на это. Ну вот у меня аналогичная ситуация. Вы сказали, что вообще не встречали линукса с tmpfs в /tmp - я вам такой линукс сходу назвал. Armbian, вариант debian с заточкой под специфику машин на arm.

Просто немного истины Вселенной. Как вы будете жить дальше с этим знанием, победит ли ЛЛео в споре и рукопожат ли Алекс - мне похуй.
Linux Safari Chrome
 Москва
1
0
Леонит Каганофф
Мне думается, эти милые пожилые люди последний раз видели Линукс в ту эпоху, когда диски были железные и трехдюймовые, и на них для Линукса выделяли ещё такую особую партицию под названием swap, чтобы Линукс занимался на ней психотерапией когда у него появляются суицидальные намерения :)
Mac Firefox
 Нижний Новгород
1
1
tartaglia
Технически, у меня сейчас три гадюшника Линуксов в трёх конторах по России, и только семь из них мне посчастливилось поставить самому. Это чисто фигня, свои Линуксы — там всё понятно и всё правильно.

О, чужие Юниксы.

Кому случалось услышать от начальника: «Я уезжаю в Турцию на две недели, вот тебе FreeBsd, которую три человека корёжили пять лет, чтобы к моему возвращению взамен был причёсанный Линукс. И начальство хочет лог имён файлов, которые мылят наружу.». И там сто скриптов на разных языках. И ты в глаза не видел FreeBsd. И у почты нет лога фалов.

Или: «Я ухожу на повышение, а я в отпуск. Вот тебе пароли от трёхсот CheckPoint и семисот цисок. Посмотри, что там, разберёшься. С цисками ты знаком, а на курсы по Чекпойнту мы тебя потом пошлём».

Или: «Вот тебе четыре разнородных кластера, посмотри, что там, мы не в курсе. (На кластерах обнаруживается pacemaker, postfix, dovecot, drbd, mysql+galera, roundcubemail, postgres, spamassassin, dovecot, zabbix, nginx, apache, bitrix, openvpn, ...). Предыдущие несколько админов что-то делали много лет, но ничего толком не работает — наладь, пожалуйста. Почему-то при перезагрузке ничего не монтируется, надо всё запускать руками. DRBD почему-то запускается в разобранном виде (оказывается, ухитряется стартовать раньше LVM2). Админы даже оставили часть паролей, остальные взломай как-нибудь. Вот документацию оставили — целых десять строчек. И у нас триста сервисов — хорошо бы на них автоматически обновлять сертификаты. Чтобы не скучать, вот ещё толпа цисок, микротиков, netgear — что-то провайдеры не слишком резервируются, а IPsec глючит. Прежние админы ничему не учились, напихали бессистемного говна и слились. И запрограммируй CardDAV, чтобы по LDAP cинхронизировался с AD. И нам насрать, что ты про половину из этого раньше не слышал, а почтой, Линуксами, сетью, Bitrix, Zabbix, AD и разработкой у тебя на прежней работе занимались специализированные отделы. Потому что в Москве денег много, и крутые высокооплачиваемые профи могут позволить себе узкую специализацию, в которой им даже не надо особенно разбираться, потому что оплачена внешняя техподдержка.»

Дураки вы все в Москве. Высокая зарплата, никак не обоснованная образованием и деловыми качествами, не говоря уже о мозгах — единственная причина вашего гонора.
Mac Safari
 Германия
0
0
karash_I
Вы занимаетесь неймдроппингом, чтобы повысить свой ЧСВ?
Mac Firefox
 Нижний Новгород
0
0
tartaglia
Да, я писал, что я не видел Линуксов, чтобы /tmp монтировался в память. Но я не утверждал, что такие Линуксы не существуют.

Поэтому вы, приведя пример Линукса с памятью в /tmp, не опровергли моё утверждение. Я и без того был уверен, что они существуют, хотя бы по высказыванию Alex Mizrahi. И я сам легко могу придумать ситуацию, когда монтирование /tmp в память неизбежно. Но речь не об этом.

Речь шла о том, что среди Линуксов, соответствующих посту, то есть где активно используется MySQL, преобладают системы, в которых временные файлы (например, разными вариантами mktemp) создаются на диске, а не в памяти. И тут я противоречил Alex Mizrahi.

A propos, на вашем "Armbian" используется MySQL? Или это часть прошивки пылесоса, где вся OS хранится в ПЗУ? Впрочем, это неважно.

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

Возможно, я выразил своё неудовольствие этим фактом не слишком толерантно. Меня это не очень волнует.

Я утверждал, что Alex написал глупость. Чтобы действительно опровергнуть меня, приведите пример какой-нибудь массовой платформы для серверов/ПК, где /tmp по умолчанию монтируется в память. Я утрусь, не впервой, мне пох.

Я утверждал, что Alex написал глупость. Я боролся с глупостью, на Линукс мне наплевать.

Против глупости сами боги бороться бессильны
© Фридрих Шиллер.
------

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

По-моему, это всё фигня, и логика никак не развивается. У меня была возможность наблюдать там, где логика вроде должна господствовать: мехмат МГУ, среда программистов.

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

Полно типа программистов, которые не могут преобразовывать логические выражения по законам де Моргана. Это совершенно примитивно, так что это не математическая, а бытовая логика.

Я никогда не встречал случая, чтобы кто-то развил логические способности. По-моему, это фабричная прошивка, основанная на геометрическом воображении и чём-то вроде интуитивно понимаемых кругов Эйлера.

Кто-нибудь видел реальную пользу для кого-то от изучения логики?
Linux Safari Chrome
 Москва
1
0
Леонит Каганофф
Осень...
Mac Firefox
 Нижний Новгород
0
0
tartaglia
Не, весенне-осенний период заканчивается. Хуже всего весна, я имел неудовольствие наблюдать.

И по моим личным наблюдениям с ума чаще сходят не от ума, а от тупости. Были известные исключения вроде Шумана или Врубеля, но они лишь подтверждают общее правило. К тому же сейчас всё чаще объявляется, что все выдающиеся люди страдали не от непонятого современниками гения, а от недолеченного сифилиса. Так простым людям проще понять невообразимое.

Вы вроде получили то ли психологическое, то ли психиатрическое образование. Не было ли у вас практики в местах скопления творческой интеллигенции вроде Кащенки?

Самому не посчастливилось, но один товарищ по мехмату, косивший под психа для академического отпуска, рассказывал, как видел в Кащенке артиста Иннокентия Смоктуновского. Известный был артист, Гамлета в кино играл, старожилы должны помнить. Музыка там Шостаковича хороша.
Mac Safari
 Германия
0
0
karash_I
> Чтобы действительно опровергнуть меня, приведите пример какой-нибудь массовой платформы для серверов/ПК, где /tmp по умолчанию монтируется в память. Я утрусь, не впервой, мне пох.
Вам уже писали - armbian.
Mac Firefox
 Нижний Новгород
0
0
tartaglia
"armbian" - популярная платформа, дающая бОльшую часть Linux-инсталляций? Она даже не упоминается в статье Wiki about Linux.

Я и не спорю, что такие бывают. Давайте 50% инсталляций серверов/ПК или ПНХ.
Windows Safari Chrome
 Домодедово
0
0
id
> замылив суть

А сути тут никакой нет. Был вопрос про разрастание индексов MySQL, и был дан исчерпывающий с практической точки зрения ряд ответов:
- проводить периодическую переиндексацию путем пересоздания таблиц;
- не использовать индексы;
- не использовать SQL вообще.

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

А оффтопик, в свою очередь, примечателен тем, что его суть невозможно замылить. По причине отсутствия оной. Вы говорите какую-то херню про "Алекс неправ" и "от изучения логики пользы нет". Я говорю какую-то херню про armbian. И эта херь стоит друг друга по простой причине: она никак не поможет ЛЛео в решении его задач.

Поэтому - нет, я вовсе не испытываю никакого смущения от того, что не промолчал.
Linux Ubuntu Firefox
 Москва
0
0
Чук
Ну в армбиане дофига чего в tmpfs и в overlayfs монтируется. Можно в fstab создать чтонть своё, или в /run, хотя хз насколько это безопасно.
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Конь с двумя хуями - это ещё что. В некоторых линуксовых роутерах в память монтируется /etc!
Linux Safari Chrome
 Болгария
0
0
Sauron
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
У меня в 2021 году /tmp тоже не монтировался в ОЗУ. А в 2023 внезапно стал монтироваться.
Windows Firefox
 Москва
0
0
Сергей Яковлев
Почему бы не использовать для этого memcached? ;-)
Windows Safari Chrome
 Mt Laurel
0
0
v_k_l
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
точно, и не надо городить cron task. lru cache
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Потому что он не умеет создавать нужные структуры и работать последовательно. Можно лишь завести переменную-список и его перезаписывать всякий раз, но если одновременно придут два сигнала, то один из них пропадет.
Linux Firefox
 Санкт-Петербург
0
0
ВД
Как они могут прийти одновременно? Сетевой интерфейс же один.
Mac Firefox
 Нижний Новгород
0
0
tartaglia
> Как они могут прийти одновременно? Сетевой интерфейс же один.

Вы не физик, случайно? Пил я в прошлом веке с одним физиком. И физик спросил: «Как могут быть параллельные, одновременно выполняющиеся задачи на одном процессоре?»
Mac Safari
 Израиль
1
0
braintunic
> Пил я в прошлом веке с одним физиком

Это вы тогда слишком много выпили и перепутали физика с физиологом…
Для физиков-то нет никаких проблем с пониманием параллельных вычислений.

Между прочим, один из пионеров теории параллельных вычислений, Дейкстра (Dijkstra), по образованию был физик-теоретик.
Mac Firefox
 Нижний Новгород
0
0
tartaglia
Да нет, был он физик, и сын у него физик, оба где-то у вас там ошиваются теперь.

А мама у них померла от рака. Хорошая была женщина, долго мне казалось, будто я вижу её издали на улице. Была она филолог, но работала вместе со мной программистом. Не помню, чтобы я заставал её возле компьютера. Славно мы жили в советское время.
Windows Safari Chrome
 Mt Laurel
0
0
jumbleview
Правильно спросил, но странно что в прошлом веке. Если на одном процессоре это называется конкуренция. Но по моему четко дифференцировать это стали после Роба Пайка "Rob Pike: concurrency is not parallelism" и это было не так давно (в этом веке).
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Панеслааась дискуссия профессионалов...
Mac Firefox
 Нижний Новгород
1
0
tartaglia
А чо, мы не профессионалы, что ль? Я вот книжку Хоара про взаимодействие процессов ещё в прошлом веке читал. Ну, не то чтобы читал, но пытался. Но AVL-деревья от heap-сорт отличаю не хуже, чем тональную секвенцию от плагальной каденции.

Параллельное программирование — вот высший класс, никто не может, что бы про себя ни думал. Разделение по процессам, разделение по потокам с синхронизацией по мьютексам и проч, Event loop, Promises, async/await и т.п.

К слову, в Go есть и мьютексы, и горутины, и нельзя обойтись чем-то одним, и я читал забавную статью, что в результате даже в Docker полно глюков — кодерам сложно. А что будет в v2, никто и не знает.

Вы, небось, думаете, что запустить в автономное плавание процесс на JS — это предел совершенства, высший класс? Я вашего ёжика ловил и пришпиливал просто из спортивного интереса, хоть мне JS по жизни не нужен.

Вот есть hackerrank, там реальные задачки для тех, кто мнит себя кодерами. Мне ни к чему, но я "Interview Preparation Kit" честно прошёл без подглядывания. Заграничные компании интересуются, как у кодеров дела на hackerrank. Только наши компании берут любых лохов, выбирать-то не из кого. Задачу по подсчёту количества минимальных остовов в мультиграфе я — для собственного удовольствия — решал два месяца и прочитал для этого несколько научных статей. Этих «остовов» триллион, а подсчитать надо за пять секунд.

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

Даже у меня, по жизни простого системщика, было дело: покупной софт хреново за десять минут показывал доступ между двумя невразумительными формальными объектами в еврейском CheckPoint, а я на досуге сделал Веб-страницу, где нормально показывался доступ между наборами IP-сетей за три секунды. И за бесполезный софт заплатили $20000, а мне дали премию 20000р. Один мой коллега буквально плакал от счастья в прямом эфире совещания, у них в конфиге на четыре тысячи правил по сто объектов в каждом ничего нельзя было понять.

... а не принять пару UDP-пакетов, нагуглив тривиальный совет на stackoverflow. Было бы чем гордиться. Профессионал, my ass.
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Я скакала три дня и три ночи, а он не ведётся.
Mac Firefox
 Нижний Новгород
0
0
tartaglia
П р и н ц е с с а. Три дня я гналась за вами. Только в бурю потеряла ваш след, встретила охотника и пошла к нему в ученики.

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

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

Кстати, IRL АА хотят ещё чирик пришить? Скорблю вместе с вами. Обратно кстати, не надеюсь, что он выпорхнет, когда дедушка уйдёт © Парфёнов про ЕБН. Как вчера было, а уже другой дедушка созрел. Печаль, искренне. Не расцветут сто цветов, не посоперничают сто школ.

ЗЫ. вы вообще сами читали ли первоисточник? Или ограничились кином? Зря. У Шварца в натуре поэмы, а не ваши смехуечки, и парочку из этих поэм я в детстве выучил наизусть. С наслаждением. Безо всякого амфибрахия. Чего и вам желаю.
Windows Safari Chrome
 Израиль
0
0
б
Я сказал потрындеть, а не похамить хозяину дома и не поулюлюкать по поводу преследования и издевательств над Навальным.
Mac Firefox
 Нижний Новгород
1
0
tartaglia
Я не Фыва, и я не в Москве, тут у нас никто не слыхал про ФБК. Я искренне сочувствую Алексею Анатольевичу, что он оторван от семьи и мучается, как я, от остеохондроза. Или от дорсопатии. Короче, у нас у обоих спина болит, и я с ужасом думаю об однократном спанье на полке поезда, не говоря уже о постоянных нарах. Я даже дома только на одном диване могу спать, чтобы не проснуться утром с приступом.

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

В действиях власти удручает непоследовательность. Вот я читаю сейчас книгу «Владимир Ленин. Выбор пути: Биография» Владлена Терентьевича Логинова и вижу, что русские революционеры любого разлива твёрдо знали, что их за их деятельность и убеждения обязательно посадят, так что готовились заранее. Например, жили десятилетиями до смены власти за границей, как Плеханов. Была понятная система, и было понятно, как с ней бороться.

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

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

Ладно, меня опять куда-то вбок понесло.

Я также сочувствую LLeo в его трудной семейной и творческой жизни и поражаюсь терпению, которое он проявляет к нам, бездельникам. Я уверен, что любой другой давно бы что-нибудь учинил. Я подозреваю, что это в Интернете совершенно уникальный случай толерантности и всепрощения. Собственно, я жду, когда и LLeo что-то учинит, и это подогревает мой интерес к этому дневнику.

В последнее время LLeo тут многие ругают почём зря, как будто увидели в его поведении что-то принципиально новое, доселе не случавшееся. При этом они утверждают, будто давно читают дневник. Нет памяти о прошлом. На этом фоне я совершенно непримечателен.

Кроме прочего, LLeo, когда меня разбанил в последний раз, признался, что не помнит, кто я такой. Это обнадёживает в том смысле, что он всё равно меня забудет, что я ему ни напиши. Тоже, помнить каждого тупого тролля. И это правильно.
Windows Safari Chrome
 Домодедово
0
0
id
> Была понятная система, и было понятно, как с ней бороться.
Чем это закончилось для системы, вроде бы можно прочитать в любом учебнике истории?

> готовились заранее. Например, жили десятилетиями до смены власти за границей
Ой, а сейчас разве не так?
Mac Firefox
 Нижний Новгород
0
0
tartaglia
> Я скакала три дня и три ночи, а он не ведётся.

Я сперва не понял: то ли несестра на Майдане незалежности, то ли мажорка под экстази в ночном клубе. Быбы — дуры, но они повыносливей мужиков.

И бесстрашно отряд поскакал на врага.

«Скакать» — это галопом. И лошадь, в отличие от бабы, не может «скакать» ни три дня, ни даже один.

Может, хорошо образованная принцесса захватила заводного коня? Ухитрилась же она обогнать Медведя.
Mac Safari
 Израиль
1
0
braintunic
> Я скакала три дня и три ночи
> «Скакать» — это галопом.
> И лошадь, в отличие от бабы, не может «скакать» ни три дня, ни даже один.

Ну так никто ведь не утверждает, что принцесса скакала три дня и три ночи на одной и той же лошади (что, естественно, физически невозможно).

Века как минимум с шестнадцатого-семнадцатого по всей Европе (да и в России тоже) была создана развитая служба курьерской конной почты, чем и воспользовалась принцесса.
Почтовые станции располагались на расстоянии где-то 50-100 километров друг от друга.
Не было проблемы для тренированной скаковой почтовой лошади преодолеть всё это расстояние галопом (конечно, не карьером в 50-60 километров в час, а размеренным скаковым галопом, где-нибудь 30 километров в час, буде дорога позволяла).
Затем лошадь менялась на следующей станции.

Если это была королевская почтовая служба, то принцессе все эти смены лошадей были положены бесплатно, как члену королевской семьи.
Но, полагаю, принцесса могла себе позволить и оплатить лошадей на коммерческой почтовой станции, чай семья не бедствовала ;)
Mac Firefox
 Нижний Новгород
1
0
tartaglia
Вообще говоря, это сказочный «сеттинг», и никто не вправе развивать его сверх того, что явно описал автор в произведении — даже сам автор не может уточнять свой сеттинг, разве что собирается писать Сильмариллион. То есть ничего из того, что вы придумали, просто нет в сказочной природе.

Раз Принцесса не говорит, что она «скакала» — значит, не спеша «гналась». Не забывайте, Медведя ей не удалось догнать за три дня.

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

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

Судя по размерам свиты, королевства у них маленькие, и 50 км/час * 14 часов/день * 3 дня = 2100 км — многовато.

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

Внесу свой вклад. В те же годы были уже достаточно развиты секретные службы, и Король знал бы маршрут Принцессы, если бы она не путешествовала инкогнито. Впрочем, даже в этом случае её бы отследили на почтовой службе дружественного королевства.

А все они друг друга потеряли и собрались у Трактирщика исключительно из-за колдунства Хозяина. Причём Медведя, как сильно оторвавшегося, явно пришлось заворачивать взад.

Так что я предпочитаю минимальный и более древний сеттинг — неподготовленный побег без заводной лошади и припасов, три максимум часа галопа в день и ночёвка в придорожных тавернах. Расплата натурой.
Mac Firefox
 Нижний Новгород
2
0
tartaglia
Сомнительная сказочка. Пьеса завершена в 1954 году. Вершителя судеб, который вертит героями как хочет, зовут «Хозяин».

В детском кине, помнится, в конце Министр-Администратор куда-то убёг, а Король ушёл на рыбалку и просил его не беспокоить.

А по правде Министр-Администратор был превращён в крысу, а Король был уничтожен: «Не превратился он в птичку, а растаял как облачко, будто его и не было.»

Было королевство, которое успешно управлялось (Король: «дело было в субботу. Сижу я, работаю, проверяю донесения министров друг на дружку»).

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

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

А вы что думали?
Windows Firefox
 Санкт-Петербург
0
0
ВД
100 километров, блин. Попробуй сам на лошади хотя бы 20 вёрст за час проскакать.
Linux Safari Chrome
 Новосибирск
0
0
Megawatt Nick
>Параллельное программирование — вот высший класс, никто не может, что бы про себя ни думал. Разделение по процессам, разделение по потокам с синхронизацией по мьютексам и проч, Event loop, Promises, async/await и т.п.

Любой начальник самого низшего звена прекрасно понимает параллельное программирование своих подчиненных, ну а военно-начальник понимает не только параллельное програмирование в совершенстве, но и микросервисную архитектуру.
Mac Firefox
 Нижний Новгород
0
0
tartaglia
Даже мелкий военачальник, отправив бойца X выполнить задание Y, заранее знает, что боец X, которому необходимо перед выполнением задания отлить, не застрянет перед толчком, в котором умер боец Z, а помочится на казарму, выполнит задание Y и своевременно доложит о результатах. В армии всё проще.
Linux Ubuntu Firefox
 Москва
0
0
Чук
>Параллельное программирование — вот высший класс, никто не может, что бы про себя ни думал. Разделение по процессам, разделение по потокам с синхронизацией по мьютексам и проч, Event loop, Promises, async/await и т.п.

Это вы еще с прерываниями и NVIC не сталкивались. Поток-то можно и притормозить до следующего тайм-слота.
Mac Firefox
 Нижний Новгород
0
0
tartaglia
Теперь — да, не сталкиваюсь.

В прошлом веке я для PDP-11 ещё писал драйверы и обрабатывал прерывания. Насколько помню, ничего сложного — race condidtion только при работе с очередью отложенной обработки. Это проблемы системного программиста. Разумеется, прошло много лет, и сейчас трудностей может быть на порядок больше. Например, на PDP-11 был один главный процессор, не было многоуровневых кешей (боюсь соврать) и т.п.

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

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

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

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

Даже среди вполне в остальном толковых кодеров я пару раз в жизни столкнулся с полным игнорированием вопроса совместного использования ресурсов, и оба раза в результате разработки этих кодеров полетели в корзину.
Windows Firefox
 Санкт-Петербург
0
0
ВД
>А чо, мы не профессионалы, что ль? Я вот книжку Хоара про взаимодействие процессов ещё в прошлом веке читал.

Профессионалы книжки пишут. Тот же Дейкстра. Или Кнут. А нагромождение мьютексов и прочих костылей, специально созданных, чтобы тормозить потоки, а не дать им спокойно развиваться параллельно — не повод для гордости.
Linux Safari Chrome
 Acarlar Mah. Mahmut Tugrul Sk. No
0
0
Преданный читатель
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Размер WAL какой? Что будет, если сделать VACUUM? В качестве brainstorm.
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Мне незнакомы эти слова...
Windows Firefox
 Russia Moscowa Tverskaya-Yamskaya1
0
0
Johny2
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
леонид изобретает свой GCM с чаем и библиотекаршами.

останется придумать следующий шаг.
указанные udp сообщения отправляются в строго определенные синхронизированные по ntp моменты времени.

например от 1 до 5 микросекунды каждой 5 секунды.
а на все остальное время устройство отправляется по таймеру в глубокий sleep и не расходует батарейку.

А затем окажется что проще чтоб это было постоянно поддерживаемое tcp соединение, чем udp.

И еще через несколько итераций получится GCM
Windows Firefox
 Хабаровск
0
0
stream
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
А потом окажется, что постоянно поддерживаемое TCP соединение существует только в голове админов локалхоста, никогда не выходивших даже за пределы NAT квартирного роутера.

А потом окажется, что надо изучать тему про TCP keepalive и особенности его работы в разных операционках, ну и не забывать оборачивать каждое создание сокета в коде. Или точно так же гонять туда-сюда каждые 60 секунд пинговые данные, только теперь еще и обернутые в TCP.

А потом окажется, что проще было один раз сделать по UDP и ничего не трогать.
Windows Firefox
 Russia Moscowa Tverskaya-Yamskaya1
0
0
Johny2
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
я смотрю, все таки вся эволюция мобильных ос и приложения за последние 10 лет обошла Вас мимо?

ну с разморозкой, продолжайте админить свой уютный localhost
Windows Firefox
 Санкт-Петербург
1
0
ВД
Вопрос про способ пополнения таблицы: это один долгоживущий демон, по одному короткоживущему демону на каждую сущность, несколько параллельно работающих с разных хостов демонов с разграничением прав или ещё что-то? Потому как воздвигать полновесную клиент-серверную архитектуру только ради того, чтобы раз в минуту крон мог подмести мусор — явный оверкилл.
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Не очень понял вопрос.

Приходят на сайт какие-то сущности (вы например через веб/nginx или технические устройства через сервер UDP), это происходит параллельными потоками, и их посещения фиксируются в таблице.
Linux Firefox
 Санкт-Петербург
0
0
ВД
Вопрос в наличии какго-нибудь единого процесса, который мог бы как содержать в своей памяти всю базу (например, посредством библиотеки sqlite), так и перерабатывать приходящие данные в sql-запросы. Потому как в sqlite эти 48 строк займут от силы десяток килобайт (тоже, конечно, дохренища, но не мегабайты же!).
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
48 строк - временная условность, правильнее исходить из соображений, что их может быть и 48 тысяч.

Смена базы данных, компьютера, операционной системы, страны и политического режима пока не предполагается.
Linux Firefox
 Санкт-Петербург
0
0
ВД
Вот сейчас провёл эксперимент на компьютере Пентиум-4 2004 года. Входной поток (в виде записей syslog, несколько сотен тысяч записей в час) фильтруется скриптом на awkе и преобразуется в поток SQL insertов (да-да, отдельной транзакцией на каждую запись). В записи 8 интов (в т.ч. timestamp) и 4 коротких (12-15 символов) текстовых поля. Каждые 10 тысяч записей формируется команда DELETE FROM TABLE WHERE TIMESTAMP < (SELECT MIN(TIMESTAMP) FROM (SELECT TIMESTAMP FROM TABLE ORDER BY TIMESTAMP DESC LIMIT 100000)); то есть из базы удаляются записи старше самой старой из последних ста тысяч. Весь этот SQL поток подаётся на вход sqlite3 версии 3.2.7 с in-memory базой. Индексов в базе всего два, автоматический ROWID (поскольку никакая комбинация полей, вообще говря, не уникальна и не может служить первичным ключом) и собственно TIMESTAMP. Предварительные результаты такие: расход процессора около 20% (можно радикально снизить путём склеивания множества инсертов в одну транзакцию), расход памяти несколько менее 30 мегабайт. Насчёт утечки скажу позже, пусть несколько часов поработает.

UPD: Вот, поработало несколько часов. Наблюдается логарифмически замедляющийся рост потребления памяти, так как по мере увеличения числа обработанных записей ROWID начинает занимать всё больше и больше байт (в т.ч. и в индексах). Не знаю, можно ли это считать утечкой.
Mac Safari Chrome
 Washington
3
0
Bb123
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Базы данных затачиваются под большие объёмы. Файлы индексов создаются с таким запасом, чтобы как можно дольше не требовалось менять его размер, так как это дорогая операция. Это как зарезервировать какой-то объём памяти. Вся работа происходит внутри файла с помощью смещений от начала файла. Это нужно, чтобы быстро вставлять новые строки без необходимости дорогой перестройки индекса.

Если у вас до нескольких тысяч строк и критична память, то проще забить на индексы. Фул-скан будет выполняться почти мгновенно. Для 48 строк они вообще не имеют смысла.
Mac Firefox
 San Jose
0
0
Ёкл
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
А сообщения для девайсов большие и/или их много?
Если девайс долго не приходил, то сообщения для него удаляются?

Можно сделать два варианта ответа: "тебе тут много сообщений: приди и забери" и "вот тут тебе ещё сообщения" (и впихнуть их прямо в ответ).
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Вы про UDP? Изначально я делал базу сообщений, чтобы их было много. Но жизнь показала, что это не нужно. Оказалось, что устройства сильно автономны, и обмен сообщениями нужен только когда админ хочет поработать с устройством удаленно в неком подобии консоли - передать какие-то команды и получить ответ.

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

В общем, в моем случае по UDP проще гонять сигналы, а важные данные, буде они случатся, по TCP.

Мне пока в основном интересен сам процесс освоения UDP, пока не знаю, для чего пригодится в будущем и какие мысли придут.
Mac Firefox
 San Jose
0
0
Ёкл
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Хмм... цепляться к устройствам с сервера видимо не вариант из-за повсеместного NAT-а. Значит, когда надо покомандовать устройством в БД кладётся сообщение "явиться к начальству, при себе иметь отчёт и вазелин".
Но если устройства не ходят на сервер весьма часто, то вот положили сообщение и ... сидим у телефона и ждём позвонит или не позвонит?
А если UDP с повесткой не дошло?
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Ну типа того. Только UDP не дошло один раз, дойдет в следующий, не проблема.
Mac Firefox
 San Jose
0
0
Ёкл
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Это-то понятно, но "админу" чего делать?

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

В таком вот аксепте какие-то команды можно было бы отправлять вместе с сообщением: дойдёт -- девайс чего-то сделает и пришлёт выхлоп, не дойдёт -- ну и ладно.
Авторизовать выполнение команды отправленной по UDP можно подписав контент пакета.
Сами команды вероятно сравнительно небольшие. А результаты девайс может сам определиться как присылать в зависимости от того сколько получилось (ну или можно влепить ещё флаг какой-нибудь в команды, что результат надо надёжно доставить).

А на случай загадочных пропаданий сообщений/команд научить девайс раз в N временных периодов ходить по TCP, если в ответ на отправляемые сообщения ничего не приходило.
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Давайте не решать проблем которых нет :)
У меня нет девайсов, которые выходят на связь раз в час, это у Ильина погодные станции так делают, но у них другие задачи :) У меня девайсы выходят на связь каждые 10 секунд, и лучше, если они это будет делать по UDP, а не по TCP как сейчас.
Linux Firefox
 Россия
3
0
NoBob
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Memory is not reclaimed if you delete individual rows from a MEMORY table. Memory is reclaimed only when the entire table is deleted. Memory that was previously used for deleted rows is re-used for new rows within the same table. To free all the memory used by a MEMORY table when you no longer require its contents, execute DELETE or TRUNCATE TABLE to remove all rows, or remove the table altogether using DROP TABLE. To free up the memory used by deleted rows, use ALTER TABLE ENGINE=MEMORY to force a table rebuild.

src: https://dev.mysql.com/doc/refman/8.0/en/memory-storage-engin[...]

So do:
ALTER TABLE bot_visit ENGINE=MEMORY;
ALTER TABLE memory_visit ENGINE=MEMORY;
from time to time
Linux Firefox
 Санкт-Петербург
0
0
Nikolay Shaplov
Как хорошо уметь читать!

Респект!

всего комментариев: 146

<< предыдущая заметка следующая заметка >>