|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Привет друзья. Как дела? Какие пятничные темы вы хотели-бы услышать? (Пятничные темы - любые технологичные. По программированию. Но не срочные. Не продуктовы баги вобщем.) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 20:46 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Весенние каникулы у детей начинаются. Зефирки учимся жарить на мангале. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:17 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, интересует запрет повторного запуска проги той же папки. Из другой можно. Главный вопрос - активировать прогу уже запущенную из этой папки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:20 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Создавай в текущей папке .pid файл с кодом текущего процесса. Да это горбуха. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:26 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dima T Весенние каникулы у детей начинаются. Зефирки учимся жарить на мангале. Разве зефирки жарят? Обычно - сосиски. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:28 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Создавай в текущей папке .pid файл с кодом текущего процесса. А если прога крашнеца и не уберет за собой .pid? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:28 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Dima T Весенние каникулы у детей начинаются. Зефирки учимся жарить на мангале. Разве зефирки жарят? Обычно - сосиски. Кстати да. Никогда не понимал этого буржуйского извращения. Или у них зефир другой? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:29 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik mayton, интересует запрет повторного запуска проги той же папки. Из другой можно. Главный вопрос - активировать прогу уже запущенную из этой папки. Ну… Создать именованный мьютекс (уровня системы). Имя мьютекса должно содержать папку запуска. При этом мьютекс нужно захватить при запуске и никогда не нужно отпускать. А вот переключиться на уже запущенное приложение... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:35 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Dima T Весенние каникулы у детей начинаются. Зефирки учимся жарить на мангале. Разве зефирки жарят? Обычно - сосиски. Жарят. Все горячее вкуснее чем холодное. Фотки дал бы, но с телефона пишу, не дома, комп дети отжали ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:35 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik mayton Создавай в текущей папке .pid файл с кодом текущего процесса. А если прога крашнеца и не уберет за собой .pid? Если крашнеца... При старте прога должна взять эксклюзивные права на доступ к этому файлу. Если твоя прога крашается, то все ограничения доступа слетают. Как и тот заблокированный мьютекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:38 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
petrav didgik пропущено... А если прога крашнеца и не уберет за собой .pid? Если крашнеца... При старте прога должна взять эксклюзивные права на доступ к этому файлу. Если твоя прога крашается, то все ограничения доступа слетают. Как и тот заблокированный мьютекс. С мьютексом понятно, не понятно причем тут .pid. А как активировать уже запущенную прогу по мьютексу?? И да. В винде. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:41 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik petrav пропущено... Если крашнеца... При старте прога должна взять эксклюзивные права на доступ к этому файлу. Если твоя прога крашается, то все ограничения доступа слетают. Как и тот заблокированный мьютекс. С мьютексом понятно, не понятно причем тут .pid. А как активировать уже запущенную прогу по мьютексу?? И да. В винде. "Активировать" это что значит в реальной жизни? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:47 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik petrav пропущено... Если крашнеца... При старте прога должна взять эксклюзивные права на доступ к этому файлу. Если твоя прога крашается, то все ограничения доступа слетают. Как и тот заблокированный мьютекс. С мьютексом понятно, не понятно причем тут .pid. Я не знаю, что это такой за файл .pid. Видимо, что это файл содержащий process id. Имея process id возможно можно определить дескриптор главного окна этого процесса и послать ему что-то типа сообщения WM_SHOW. Кстати, Process Explorer умеет определять какой процесс держит файл. Так что в файл записывать process id, видимо, не нужно. didgik А как активировать уже запущенную прогу по мьютексу?? И да. В винде. Я не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:48 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Вот только что я запустил программу, которая держит определённый файл. Потом я запустил Process Explorer. Главное меню: Find -> Find handle or DLL. По имени файла нашёлся процесс, который держит этот файл. Дальше ПКМ на этом процессе: Window -> Bring to front. Всё, приложение активировано на основе пути к файлу, который (файл) держит это приложение. Как блокировку файла заменить на блокировку глобального мьютекса... Ну... может можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:57 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dima T "Активировать" это что значит в реальной жизни? Чтоб запущенная прога развернулась с панели задач. Впрочем, вопрос только в том, как во второй копии получить хендл окна уже запущеной проги из этой же папки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 22:57 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik Dima T "Активировать" это что значит в реальной жизни? Чтоб запущенная прога развернулась с панели задач. Впрочем, вопрос только в том, как во второй копии получить хендл окна уже запущеной проги из этой же папки. How to get main window handle from process id? . Поиск в гугле по: winapi get main window handle for process id. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 23:04 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
petrav didgik пропущено... Чтоб запущенная прога развернулась с панели задач. Впрочем, вопрос только в том, как во второй копии получить хендл окна уже запущеной проги из этой же папки. How to get main window handle from process id? . Поиск в гугле по: winapi get main window handle for process id. Тогда вопрос в том, как во второй копии получить process id уже запущеной проги из этой же папки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 23:07 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik petrav пропущено... How to get main window handle from process id? . Поиск в гугле по: winapi get main window handle for process id. Тогда вопрос в том, как во второй копии получить process id уже запущеной проги из этой же папки. Уже всё же сказано. - В .pid файл записать process id. Но на случай падения приложения нужно держать эксклюзивные права на запись в этот файл. - Можно держать эксклюзивные права вообще на пустой файл в папке приложения. И по пути к этому файлу определить process id — process explorer так может. - Можно попробовать по имени мьютекса (который содержит путь к папке) определить process id, который его держит. Тут есть ещё момент, что на компе может быть авторизовано сразу несколько пользователей. WinAPI неисчерпаем так же как и атом. Это ещё В.И. Ленин говорил. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 23:17 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
у меня есть ini файл. Наверно можно его заюзать под это дело. И писать в него pid при запуске. Т.е. при запуске проги, мы проверяем, есть ли возможность в него писать, если нет, то берем оттуда pid, активируем запущенный экземпляр и закрываемся. И никакие мьютексы не нужны. Осталось узнать про эксклюзивные права записи. Как ставить и как проверять. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 23:28 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik у меня есть ini файл. Наверно можно его заюзать под это дело. И писать в него pid при запуске. Т.е. при запуске проги, мы проверяем, есть ли возможность в него писать, если нет, то берем оттуда pid, активируем запущенный экземпляр и закрываемся. И никакие мьютексы не нужны. Осталось узнать про эксклюзивные права записи. Как ставить и как проверять. При запуске проги пытаемся заблокировать файл на эксклюзивную запись. Если получилось, то записываем в ini файл pid и запускаемся. Если не получилось, то пытаемся открыть этот файл на чтение и читаем pid. Если получилось, читаем pid. По нему получаем HWND и активируем окно. Выходим. Эксклюзивные права на запись, например, проверяются попыткой получить такие права. Получил - значит ты хозяин. Документация на функцию ::CreateFile() из WinAPI. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 23:36 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
о, а может сразу HWND в ини пихать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 23:38 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik о, а может сразу HWND в ини пихать? Не знаю. Попробуйте. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 23:48 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
petravЭксклюзивные права на запись, например, проверяются *попыткой* получить такие права. Получил - значит ты хозяин. Документация на функцию ::CreateFile() из WinAPI. Ага. Прочитать PID из файла, который не удалось открыть. Отличный план. Может, не стоит маяться дурью с файлом, а сразу искать окно?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 01:27 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravЭксклюзивные права на запись, например, проверяются *попыткой* получить такие права. Получил - значит ты хозяин. Документация на функцию ::CreateFile() из WinAPI. Ага. Прочитать PID из файла, который не удалось открыть. Отличный план. Может, не стоит маяться дурью с файлом, а сразу искать окно?.. Прочитать PID из файла, который не удалось открыть на запись. Читать можно. Я так понял. А поиск окна я не осилил пока что. В этом и проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 02:11 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dima T Все горячее вкуснее чем холодное. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 06:06 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik Dimitry Sibiryakov пропущено... Ага. Прочитать PID из файла, который не удалось открыть. Отличный план. Может, не стоит маяться дурью с файлом, а сразу искать окно?.. Прочитать PID из файла, который не удалось открыть на запись. Читать можно. Я так понял. А поиск окна я не осилил пока что. В этом и проблема. Не надо никуда PID писать. Вдруг твой процесс скоропостижно упал не стерев PID из файла, а другой запустился с этим же PID. Виндавс может выдать тот же PID другому процессу. Просто перебери все процессы и смотри каким EXE они созданы. Найдешь свой, значит оно. Затем перебираешь окна внутри процесса. Но проще сразу искать нужное окно FindWindowEx() ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 07:13 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dima T didgik пропущено... Прочитать PID из файла, который не удалось открыть на запись. Читать можно. Я так понял. А поиск окна я не осилил пока что. В этом и проблема. Не надо никуда PID писать. Вдруг твой процесс скоропостижно упал не стерев PID из файла, а другой запустился с этим же PID. Виндавс может выдать тот же PID другому процессу. Факт того что кто-то держит эксклюзивные права на запись является подтверждением того, что PID актуальный. Dima T Просто перебери все процессы и смотри каким EXE они созданы. Найдешь свой, значит оно. Кстати, да. Наверное, это самое простое. Перебрать все процессы и посмотреть полные пути к файлу .exe. Правда отсутствует некий функционал атомарности. Что будет если из одной папки практически одновременно будет дважды запущен один exe? Скорее всего они оба завершат свою работу. Ну и это не сработает если в будущем нужно будет «блокировать» не по папке где находится exe, а по некоторой другой папке куда конкурирующие процессы хотят получить эксклюзивные права на запись. В данном случае блокировка файла в этой папке гораздо лучше. Dima T Но проще сразу искать нужное окно FindWindowEx() Поиск по заголовку окна? Ну это никуда не годится. Еще можно подумать про создание разделяемой области памяти куда что-то будем писать — pid, например. Ну и вроде есть функционал временных файлов. Файлов, которые удаляет ОС при завершении процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 12:12 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
petravПоиск по заголовку окна? Обычно ищут по классу окна, а не заголовку. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 12:58 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik Dimitry Sibiryakov пропущено... Ага. Прочитать PID из файла, который не удалось открыть. Отличный план. Может, не стоит маяться дурью с файлом, а сразу искать окно?.. Прочитать PID из файла, который не удалось открыть на запись. Читать можно. Я так понял. А поиск окна я не осилил пока что. В этом и проблема. Там не нужны эксклюзивные права. Если запускать в поддереве %USER_PROFILE% то нам скорее всего хватит обычных файловых прав. И нужны будут парочка ОС API функций которые 1) берут свой собственный PID, 2) проверяют что среди списка процессов нету заданного кастомного PID. Можем попробовать набросать алгоритм. Против семафоров я не имею ничего против но они должны быть именованные, чтобы структура запускаемых процессов имела связи 1:1 семафор с user_dir текущего процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:17 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
FindWindow не подошло. Если окон данного класса больше одного, то оно возвращает первый попавшийся хендл. Соответственно надо перебирать все окна и опять вычислять есть ли нужное. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:24 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgikСоответственно надо перебирать все окна и опять вычислять есть ли нужное. Да. В чём проблема? На две строчки больше кода написать - пальцы боишься стереть?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:40 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov didgikСоответственно надо перебирать все окна и опять вычислять есть ли нужное. Да. В чём проблема? На две строчки больше кода написать - пальцы боишься стереть?.. FindWindow тут не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:42 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgikFindWindow тут не нужен. Это самый простой из способов "активировать прогу уже запущенную из этой папки". Но смелые эксперименты молодых сурков не остановить... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:46 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov didgikFindWindow тут не нужен. Это самый простой из способов "активировать прогу уже запущенную из этой папки". Но смелые эксперименты молодых сурков не остановить... Я тоже так думал. Но оказалось, что это не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:48 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgikЯ тоже так думал. Но оказалось, что это не так. Оказалось, что ты просто и этого не сумел. Но хочу тебя огорчить: остальные способы не только сложнее, но ещё и не работают. В современных Windows программа неспособна активизироваться самостоятельно, без внешней помощи. И это правильно. PS: Хотя, конечно, твоё "активироваться" может отличаться от моего "вывести окно на передний план". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:57 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov didgikЯ тоже так думал. Но оказалось, что это не так. Оказалось, что ты просто и этого не сумел. Но хочу тебя огорчить: остальные способы не только сложнее, но ещё и не работают. В современных Windows программа неспособна активизироваться самостоятельно, без внешней помощи. И это правильно. Вопрос не в том, как активизировать программу, а в том, чтоб найти нужную. И да, с помощью FindWindow я не сумел. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 14:01 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgikГлавный вопрос - активировать прогу didgikВопрос не в том, как активизировать программу didgikа в том, чтоб найти нужную. И да, с помощью FindWindow я не сумел. RTFM: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowthreadprocessid https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess https://docs.microsoft.com/en-us/windows/win32/api/psapi/nf-psapi-getmodulefilenameexa Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 14:17 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
В продолжение пятницы-субботы. По мотивам https://www.sql.ru/forum/1334409/tshark-bencode Решил писать события протокола DHT в Apache Cassandra. Задача без особого смысла. Так. Бесконечно играющая. Я ее думаю в выходные дни. И когда жене от меня ничего не нужно. И в целях изучения таких ... распределённых и децентрализованных штук. Но для начала - понаблюдать статистику. Сколько я вижу активных узлов в течение дня. Сколько они ищут. Что они публикуют. Первая идея была - фиксировать UDP-пакеты типа "поиск ноды" (уже декодированый пакет). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
И фиксировать количество таких find-s по каждому таргету. Я предполагал что популярные раздачи тогда выйдут в некую неравномерную гистограмму. Первый вариант таблицы был таков (это синтаксис CQL Apache Cassandra. Не-SQL!) Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Далее поля счетчики *_requests я планировал обновлять одним update-ом. Типа Код: sql 1. 2.
Не вышло. Cassandra не позволяет инкремент полей за 1 dml операцию если они не являются типом counter. Окей. Переделал под счетчики. Но не тут-то было. Таблица со счетчиками не может содержать поля смешанного типа. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Получается что для такого использования мне надо держать аж 2 таблицы. С одиаковыми ключами но с разными атрибутами. Одни для счетчиков - а другие просто для вариативных типов данных. Вот такой он этот жестокий и коварный No-SQL. Интересно бы узнать мотивацию к такому разделению? Возможно это были требования жестокой атомарности? Или какие-то другие ограничения distributed систем? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 18:51 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Получается что для такого использования мне надо держать аж 2 таблицы. С одиаковыми ключами но с разными атрибутами. Одни для счетчиков - а другие просто для вариативных типов данных. Вот такой он этот жестокий и коварный No-SQL. Интересно бы узнать мотивацию к такому разделению? Возможно это были требования жестокой атомарности? Или какие-то другие ограничения distributed систем? Проще говоря, делать классическую звезду (и снежинку как ее развитие) намного выгоднее с точки зрения производительности, и обновления и выборок, для задач подсчета количества. Это уже с точки зрения выдачи результата проще писать запрос к одной таблице чем помнить что у тебя их две и правильно делать связку таблиц на каждый запрос, но это обычно решается вьюшками. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 21:02 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl mayton Получается что для такого использования мне надо держать аж 2 таблицы. С одиаковыми ключами но с разными атрибутами. Одни для счетчиков - а другие просто для вариативных типов данных. Вот такой он этот жестокий и коварный No-SQL. Интересно бы узнать мотивацию к такому разделению? Возможно это были требования жестокой атомарности? Или какие-то другие ограничения distributed систем? Проще говоря, делать классическую звезду (и снежинку как ее развитие) намного выгоднее с точки зрения производительности, и обновления и выборок, для задач подсчета количества. Это уже с точки зрения выдачи результата проще писать запрос к одной таблице чем помнить что у тебя их две и правильно делать связку таблиц на каждый запрос, но это обычно решается вьюшками. Какие снежинки? Какая нормализация? Cassandra - это махровый NoSQL. Joins не поддерживается. Консистетность между таблицами - слабая. Она есть на уровне eventual consistency. Тоесть грубо говоря каждая таблица лежит в своём собственном времени. Почему я взял cassandra? Не знаю. Просто так захотелось. Инженерное любопытство. У нее другие плюшки. Но тема пока не об этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 22:00 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Какие снежинки? Какая нормализация? Cassandra - это махровый NoSQL. От технической стороны организации базы данных, принципы организации данных не исчезают и не меняются. NoSQL даже более удобен для организации звезд, и сильнее напоминает о пользе нормализации чем реляционные БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 23:47 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl mayton Какие снежинки? Какая нормализация? Cassandra - это махровый NoSQL. От технической стороны организации базы данных, принципы организации данных не исчезают и не меняются. NoSQL даже более удобен для организации звезд, и сильнее напоминает о пользе нормализации чем реляционные БД. Я думаю что о нормализации пока говорить раненько. Хотя-бы по той причине что в этом домене никто "дупля не отсреливает". Я имею в виду DHT, KAD, Chord e.t.c. И я пока поставил простую задачу - учесть количество запросов на публикацию контента от "id". По сути сделать 1 таблицу-лог которая просто фиксирует число интеракций по id. По мере поступления информации я буду эту модель нормализовывать. Но пока еще рано говорить о нормализации. Я просто не знаю как связаны между собой атрибуты id, target, token. Как только уясню - сможем нормализовать. Обычная бизнесовая проблема. Нехватка знаний по домену. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 23:53 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Я думаю что о нормализации пока говорить раненько. Денормализация будет полезна на этапе выборок из базы. Вот когда будешь делать отчетную систему на свою базу - тогда и надо заниматься денормализацией, а во всех остальных этапах и особенно на этапе проектирования БД - нормальзованные данные это необходимо. mayton И я пока поставил простую задачу - учесть количество запросов на публикацию контента от "id". По сути сделать 1 таблицу-лог которая просто фиксирует число интеракций по id. И тут действительно nosql база будет хорошо работать и любые объемы съест не подавившись. mayton Я просто не знаю как связаны между собой атрибуты id, target, token. Как только уясню - сможем нормализовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 04:52 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl mayton Я думаю что о нормализации пока говорить раненько. Впервые слышу такое прочтение понятия нормализации. Это NoSQL так на людей влияет? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 12:08 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
В NoSQL нормализацию заменяют на агрегацию. Это по сути наружение 1НФ и включение в один data-row целой коллекции других типизированных data-row или документов. Но в NoSQL - на самом деле технический долг еще более силён чем в реляционках. Если в Oracle ты можешь по ходу развития доменной модели "подбрасывать" новые связи или даже поменять роли первичных ключей или расширить их, то в NoSQL системе как один раз сделал дизайн ключей - так они и будут навсегда. Исправлять - принципиально невозможно. Можно просто пересоздавать таблицы заново (делать CTAS) и причем ОДНОВРЕМЕННО с изменением семантик. А делать CTAS в продуктовой работающей БД - это смерти подобно. И диска не хватает обычно и времени регламента нету. В середине 2010х мне один Моного-разработчик плакался. Жаловался что много информации хранится безо всякого смысла в ихних базах. Не хватает схем (видимо создавали schema-less). И вообще - лучший способ потерять какой-то атрибут навсегда - это положить его в документ Mongo. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 16:52 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton В NoSQL нормализацию заменяют на агрегацию. Это по сути наружение 1НФ и включение в один data-row целой коллекции других типизированных data-row или документов. То что NoSQL обычно удобнее для агрегации, не значит что надо заменять нормализацию. Кушать плюшки не требует переходить на плюшечную диету. mayton Но в NoSQL - на самом деле технический долг еще более силён чем в реляционках. Если в Oracle ты можешь по ходу развития доменной модели "подбрасывать" новые связи или даже поменять роли первичных ключей или расширить их, то в NoSQL системе как один раз сделал дизайн ключей - так они и будут навсегда. Исправлять - принципиально невозможно. Можно просто пересоздавать таблицы заново (делать CTAS) и причем ОДНОВРЕМЕННО с изменением семантик. А делать CTAS в продуктовой работающей БД - это смерти подобно. И диска не хватает обычно и времени регламента нету. Разница между реляционной и не-реляционной базой на самом деле очень маленькая. И заключается она всего-лишь в том, что в "реляционной" можно определить связи (внешние ключи которые) и сам движок БД будет отслеживать их целостность при изменении данных. А в не-реляционной такой возможности нет, там за целостностью данных надо следить на уровне приложения. И все. Вся остальная разница чисто косметическая. Другой язык запросов, другие возможности-ограничения на конкретные плюшки (в смысле что именно движок БД способен автоматизировать). Но и только. Вот смотри, ты сейчас используешь Кассандру которая хочет держать счетчики в отдельных таблицах и не мешать их с полями другого типа. Это плюшка. А Оракл вообще не имеет счетчиков, нет у него такой плюшки в движке, поэтому ораклисты вынужденны использовать обычное целочисленное поле. А еще чтобы сделать автоматическую нумерацию записей ораклистам надо создать sequence. А mssql-овцам не надо, им хватает просто определить поле как autoincrement. А sqlite-овцам нет нужды определять текстовое это поле или числовое, чрезвычайно удобно, очень непривычно и может привести к потерям производительности, но очень удобно. А в IQ нет нужды делать индексы, там каждое поле автоматически индексировано потому что у БД колоночный метод хранения таблиц - очень тормознуто на обновлениях, но для выборок - конфетка. Это все плюшки, уникальные и местами загадочные, но плюшки конкретных движков и технических решений примененных в них. Но разве это отменяет принципы организации данных? Ты в любой базе можешь сделать как 0nf простынь, так и снежинку в 5nf (которая теоретический идеал, но никто не видел на практике). Не, я конечно понимаю что некоторые местные люди считают что data structures в java и data structures в c++ это очень разные data structures и читать книжки использующие "вражеский язык" для понимания самих data structures это уголовно наказуемое деяние. Но ... mayton В середине 2010х мне один Моного-разработчик плакался. Жаловался что много информации хранится безо всякого смысла в ихних базах. Не хватает схем (видимо создавали schema-less). И вообще - лучший способ потерять какой-то атрибут навсегда - это положить его в документ Mongo. Мало ли ты встречал приложений завязанных на Oracle/MSSQL/etc которые сами следят за связностью данных в разных таблицах? А ведь это типичные RDBMS используемые в модели NR-DBMS и то что они используют язык запросов наследованный от SQL-92 не делает их реляционными. С другой стороны, я сейчас работаю с nosql базой (разработанной в начале 80-х), совершенно другой язык запросов, таблицы называют файлами и хранят структуру таблиц во внешних текстовых файлах... Но при этом весь доступ к БД организован через одну единственную билиотеку, которая читает те текстовые файлы и самостоятельно следит за целостностью ссылок. Так что несмотря на то что это "библиотека" - на практике получается классический embedded rdbms. При этом она считается и описывается как nosql, потом что там нет вообще ни грамма от sql :) Там конечно тоже не мало странностей и идиотизмов (в первую очередь из-за "встроенности" с которой надо уметь работать), но... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 20:21 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl mayton Но в NoSQL - на самом деле технический долг еще более силён чем в реляционках. Если в Oracle ты можешь по ходу развития доменной модели "подбрасывать" новые связи или даже поменять роли первичных ключей или расширить их, то в NoSQL системе как один раз сделал дизайн ключей - так они и будут навсегда. Исправлять - принципиально невозможно. Можно просто пересоздавать таблицы заново (делать CTAS) и причем ОДНОВРЕМЕННО с изменением семантик. А делать CTAS в продуктовой работающей БД - это смерти подобно. И диска не хватает обычно и времени регламента нету. Я имел в виду следующее. Стоимость поддержки изменений в реляционной БД ~ равна некой условной величине. Назовем ее 1 story point. Добавить внешний ключ. 1 единица. Проиндексировать поле - тоже 1 единица. Порезать таблицу вдоль на 2 суб-таблицы типа родитель-потомок - тоже 1 единица. Я утрирую конечно - но объем работ примерно одинаков с точки зрения рисков. А в не-реляционных идет так. Сделать плюшку - 0.5 поинтов. Потом еще плюшка - 0.5 поинтов. А потом прилетает плюшка которая стоит аж 100500 поинтов. Или ее сделать нереально или архитекторы просто ее не хотят делать по причине того что модель уже настолько далека от желаемого что проще создать новую систему. При том что в реляционной эта-же плюшка стоила бы ну 3-5 поинтов. Вот это я имел в виду. Непрогнозируемые затраты. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 20:40 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl Разница между реляционной и не-реляционной базой на самом деле очень маленькая. И заключается она всего-лишь в том, что в "реляционной" можно определить связи (внешние ключи которые) и сам движок БД будет отслеживать их целостность при изменении данных. А в не-реляционной такой возможности нет, там за целостностью данных надо следить на уровне приложения. И все. Ну ты даёшь блин. Ну возьми бухгалтерскую учебную бд и втащи ее в не-реляционную с сохранением целостности денег на транзакциях и отчотах. Кстати перечисли те системы из класса не-реляционных на которые ты ссылаешся. Тема - это размытая. Тут - каждый сам себе что-то имеет в виду. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 20:46 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl Вот смотри, ты сейчас используешь Кассандру которая хочет держать счетчики в отдельных таблицах и не мешать их с полями другого типа. Это плюшка. А Оракл вообще не имеет счетчиков, нет у него такой плюшки в движке, поэтому ораклисты вынужденны использовать обычное целочисленное поле. Разве в Оракле я не могу сделать такое? Код: plsql 1.
Ровно тоже самое я хотел от Cassandra но она отказала мне в декларации таблиц а вовсе не в реализации этого чудесного DML. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 21:08 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl А в IQ нет нужды делать индексы, там каждое поле автоматически индексировано потому что у БД колоночный метод хранения таблиц - очень тормознуто на обновлениях, но для выборок - конфетка. А вот с этого момента - поподробнее. Column-oriented это не про индекс а про форму хранения. Не знаком c IQ но идеология column-oriented это не про обновления а про выборки-агрегации. Разворот на 90 градусов data-row по сути. Хотя может мы о разных вещах говорим? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 21:25 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl Мало ли ты встречал приложений завязанных на Oracle/MSSQL/etc которые сами следят за связностью данных в разных таблицах? А ведь это типичные RDBMS используемые в модели NR-DBMS и то что они используют язык запросов наследованный от SQL-92 не делает их реляционными. Вопрос задан как-то странно. "Мало ли..." Скажу так. Я встречал много плохих приложений которые благодаря законам и гарантиям RDBMS худо-бедно работали. И я встречал "очень модные" попытки писать данные в Windows/NTFS и AWS/S3 которые впоследствии становились мусорной свалкой где нельзя было ничего гарантировать и бизнес-логика должна была просто учитывать возможные ошибки неконсистентности как данность. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 21:30 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl С другой стороны, я сейчас работаю с nosql базой (разработанной в начале 80-х), совершенно другой язык запросов, таблицы называют файлами и хранят структуру таблиц во внешних текстовых файлах... Но при этом весь доступ к БД организован через одну единственную билиотеку, которая читает те текстовые файлы и самостоятельно следит за целостностью ссылок. Так что несмотря на то что это "библиотека" - на практике получается классический embedded rdbms. При этом она считается и описывается как nosql, потом что там нет вообще ни грамма от sql :) Там конечно тоже не мало странностей и идиотизмов (в первую очередь из-за "встроенности" с которой надо уметь работать), но... Что это за волшебная библиотека если не секрет? Я сейчас выпил два по 0.5 светлого и очень сентиментален и уже готов взять в объятия это чудо и полюбить его крепче чем Oracle в БД и Erlang в отказоустойчивых системах. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 21:33 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton White Owl С другой стороны, я сейчас работаю с nosql базой (разработанной в начале 80-х), совершенно другой язык запросов, таблицы называют файлами и хранят структуру таблиц во внешних текстовых файлах... Но при этом весь доступ к БД организован через одну единственную билиотеку, которая читает те текстовые файлы и самостоятельно следит за целостностью ссылок. Так что несмотря на то что это "библиотека" - на практике получается классический embedded rdbms. При этом она считается и описывается как nosql, потом что там нет вообще ни грамма от sql :) Там конечно тоже не мало странностей и идиотизмов (в первую очередь из-за "встроенности" с которой надо уметь работать), но... Что это за волшебная библиотека если не секрет? Я сейчас выпил два по 0.5 светлого и очень сентиментален и уже готов взять в объятия это чудо и полюбить его крепче чем Oracle в БД и Erlang в отказоустойчивых системах. Ах да, темка то %$#!@, но зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 23:27 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Я имел в виду следующее. Стоимость поддержки изменений в реляционной БД ~ равна некой условной величине. Назовем ее 1 story point. Добавить внешний ключ. 1 единица. Проиндексировать поле - тоже 1 единица. Порезать таблицу вдоль на 2 суб-таблицы типа родитель-потомок - тоже 1 единица. Я утрирую конечно - но объем работ примерно одинаков с точки зрения рисков. А в не-реляционных идет так. Сделать плюшку - 0.5 поинтов. Потом еще плюшка - 0.5 поинтов. А потом прилетает плюшка которая стоит аж 100500 поинтов. Или ее сделать нереально или архитекторы просто ее не хотят делать по причине того что модель уже настолько далека от желаемого что проще создать новую систему. При том что в реляционной эта-же плюшка стоила бы ну 3-5 поинтов. Стоимость поддержки изменений в любой БД (реляционной и не) измеряется в IO. Хочешь обновить одну запись? Читаем с диска в память индекс, в нем находим где в таблице находится нужная запись, читаем тот самый сектор с диска, обновляем данные в памяти, записываем обновленный сектор обратно на диск. Если условия поиска записи не попадает ни под один индекс - поочередно читаем с диска всю таблицу, проверяем каждую запись на совпадение с условием поиска. Если хочешь создать новый индекс - поочередно читаем с диска всю таблицу, строим индекс, записываем его на диск. Самое дорогое - IO с диском. Поэтому и стараются давать кэши побольше, SSD диски побыстрее, индексы поточнее. Нету никаких "единиц" есть только чтение-запись с диска. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 01:03 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton White Owl Разница между реляционной и не-реляционной базой на самом деле очень маленькая. И заключается она всего-лишь в том, что в "реляционной" можно определить связи (внешние ключи которые) и сам движок БД будет отслеживать их целостность при изменении данных. А в не-реляционной такой возможности нет, там за целостностью данных надо следить на уровне приложения. И все. Ну ты даёшь блин. Ну возьми бухгалтерскую учебную бд и втащи ее в не-реляционную с сохранением целостности денег на транзакциях и отчотах. Кстати перечисли те системы из класса не-реляционных на которые ты ссылаешся. Тема - это размытая. Тут - каждый сам себе что-то имеет в виду. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 01:04 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton White Owl Вот смотри, ты сейчас используешь Кассандру которая хочет держать счетчики в отдельных таблицах и не мешать их с полями другого типа. Это плюшка. А Оракл вообще не имеет счетчиков, нет у него такой плюшки в движке, поэтому ораклисты вынужденны использовать обычное целочисленное поле. Разве в Оракле я не могу сделать такое? Код: plsql 1.
Код: plsql 1.
будет получше слегка :) mayton Ровно тоже самое я хотел от Cassandra но она отказала мне в декларации таблиц а вовсе не в реализации этого чудесного DML. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
В одной таблице описание объекта, в другой счетчики. Причем с точки зрения производительности будет лучше даже не одну таблицу, а три сделать: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Чем меньше таблица в ширину, тем больше записей влезает на одну страницу. И при условии что надо будет обновлять несколько записей подряд - вместо одного IO на каждую запись может получиться один IO на несколько записей. Тут может помочь кластерная индексация, хотя это и не совсем совпадает с твоей текущей задачей. А работать с этим ты будешь также как и раньше, просто в одну таблицу пихаешь описание ноды, а потом дергаешь счетчики во вторичной таблице. Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 01:20 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton White Owl А в IQ нет нужды делать индексы, там каждое поле автоматически индексировано потому что у БД колоночный метод хранения таблиц - очень тормознуто на обновлениях, но для выборок - конфетка. А вот с этого момента - поподробнее. Column-oriented это не про индекс а про форму хранения. Не знаком c IQ но идеология column-oriented это не про обновления а про выборки-агрегации. Разворот на 90 градусов data-row по сути. Хотя может мы о разных вещах говорим? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 01:32 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton White Owl С другой стороны, я сейчас работаю с nosql базой (разработанной в начале 80-х), совершенно другой язык запросов, таблицы называют файлами и хранят структуру таблиц во внешних текстовых файлах... Но при этом весь доступ к БД организован через одну единственную билиотеку, которая читает те текстовые файлы и самостоятельно следит за целостностью ссылок. Так что несмотря на то что это "библиотека" - на практике получается классический embedded rdbms. При этом она считается и описывается как nosql, потом что там нет вообще ни грамма от sql :) Там конечно тоже не мало странностей и идиотизмов (в первую очередь из-за "встроенности" с которой надо уметь работать), но... Что это за волшебная библиотека если не секрет? Я сейчас выпил два по 0.5 светлого и очень сентиментален и уже готов взять в объятия это чудо и полюбить его крепче чем Oracle в БД и Erlang в отказоустойчивых системах. И нет, это не шутка, она действительно так называется :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 01:34 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, ФС как база данных. Сценарии, когда такое прокатит и всё такое. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 06:28 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl mayton пропущено... Ну ты даёшь блин. Ну возьми бухгалтерскую учебную бд и втащи ее в не-реляционную с сохранением целостности денег на транзакциях и отчотах. Кстати перечисли те системы из класса не-реляционных на которые ты ссылаешся. Тема - это размытая. Тут - каждый сам себе что-то имеет в виду. dBase видел. Мы грузили с него телефонный трафик в Oracle. Бухгалтерию не видел. Мы как раз смигрировали с одной старой dbf-системы на Парус предприятие. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 11:17 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Чем меньше таблица в ширину, тем больше записей влезает на одну страницу. И при условии что надо будет обновлять несколько записей подряд - вместо одного IO на каждую запись может получиться один IO на несколько записей. Тут может помочь кластерная индексация, хотя это и не совсем совпадает с твоей текущей задачей. Не могу согласится с таким разбиением. В инженерных задачах - эстетика тоже важна. А я - большой эстет. Я не ставлю себе задачей - суждать физический размер data-row. Эта цель - специфична для bigdata - технологий. И оптимизация попаданий в кеш-линию мне тоже не нужна пока. Мне важнее то насколько удобно я буду видеть статистику реквестов по нодам. Тем более что они связны. Если нода сделала ping. То следующим реквестом оа запросит список известных пиров или другиг нодов. Корреляция выходит. И зачем мне тогда таблицы нарезанные узкими полосками? Тут самое толстое поле - это первичный ключ. Разумнее склеивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 11:22 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, А разве сам движок БД не мог бы размещать столбцы по отдельности, если в определённых ситуациях это производительнее? Потому что размещать атрибуты в отдельных таблицах — это беспредел. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 11:31 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
petrav mayton, А разве сам движок БД не мог бы размещать столбцы по отдельности, если в определённых ситуациях это производительнее? Потому что размещать атрибуты в отдельных таблицах — это беспредел. Apache ORC и Parquet так и делают. Но это не движки DBMS. А движки неких замороженных снимков данных для аналитики. Обычно они - исторические. По сути это форматы бинарного хранения больших данных. Даижком это назвать вряд-ли можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 11:56 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik mayton, интересует запрет повторного запуска проги той же папки. Из другой можно. Главный вопрос - активировать прогу уже запущенную из этой папки. Очень просто же, вешаешь мьютекс именованый глобальный, если создал -- ты первый. Если мьютекс уже был создан -- приложение уже было запущено, и ты завершаешься. Либо также можно глобальный атом делать, либо другой любой именованый объект межпроцессного взаимодействия. (в линуксах для этого используют часто реальные файлы в файловой системе) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 12:18 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, Нужны какие то тесты что ли.... Показывающие что "вот схема классик и бд не справляется" = наличие проблемы. А вот схема заточенная на решение проблемы. Ну а по теории, строят Логическую и Физическую схему. В логической бизнес. В физической ключи, отношения, типы и последовательности. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 12:23 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mayton, Нужны какие то тесты что ли.... Показывающие что "вот схема классик и бд не справляется" = наличие проблемы. А вот схема заточенная на решение проблемы. Ну а по теории, строят Логическую и Физическую схему. В логической бизнес. В физической ключи, отношения, типы и последовательности. Нет-нет. Нету пока никаких тестов. И нету проблемы. Есть просто вопрос эстетики. Мне не нравится когда таблица порезана на 3 вертикальных полоски просто так. В угоду идеям перформанса. Я не знаю какова должна быть просадка перформанса (явно больше 1000%) чтоб я начал думать о порезании таблич на куски. Да и не ставлю я пока таких вопросов. Давайте поскипаем эту тему. Я подниму ее чуть позже в Программировании в разрезе самого сетевого протокола. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 12:57 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, Полоски это партицирование? >поскипаем = ОК ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 13:23 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Вообще мне всегда казалось, что NoSQL был рождён из-за недостатков SQL. Проблема реляционных баз данных в плохой масштабируемости. Когда возникает big data и тебе нужны десятки тысяч серверов БД по всей планете, то SQL не справляется. Да, NoSQL не гарантирует связанности данных, но мы ей жертвуем, что бы юзер хотя бы что-то мог найти в нашей распределённой БД. Но в данном диалоге прослеживаются такие нотки, что мол вообще можно/нужно использовать NoSQL просто повсеместно. Просто потому что это модно и молодёжно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 13:31 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
petravВообще мне всегда казалось, что NoSQL был рождён из-за недостатков SQL. Да, но не тех, о которых ты говоришь. Когда очередной энтузазист делает свою собственную СУБД с покером - он не осиливает полный парсер и оптимизатор SQL поэтому выкидывает его и преподносит прямой доступ к внутренним структурам и функциям как достоинство. STFW FwMas. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 13:45 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
По поводу поля counter. Я думаю что все просто. Запросы с инкрементом - не идемпотентные. А поскольку Apache Cassandra гарантирует работу таблиц одной базы в пределах земного шара - то ей нужны внятные механизмы репликации которые не сломают реплику. Скорее всего такое разделение введено с целью разделить два протокола. Один - простой для UPDATE .. SET field = value. А другой для UPDATE .. SET field = f(field) который требует повышенного внимания в дубликатам сетевых собыйтий. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:19 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Не могу согласится с таким разбиением. В инженерных задачах - эстетика тоже важна. А я - большой эстет. Я не ставлю себе задачей - суждать физический размер data-row. Эта цель - специфична для bigdata - технологий. И оптимизация попаданий в кеш-линию мне тоже не нужна пока. Мне важнее то насколько удобно я буду видеть статистику реквестов по нодам. Тем более что они связны. Если нода сделала ping. То следующим реквестом оа запросит список известных пиров или другиг нодов. Корреляция выходит. И зачем мне тогда таблицы нарезанные узкими полосками? Тут самое толстое поле - это первичный ключ. Разумнее склеивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:21 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Хм... это мысль. Впрочем я пока думаю выкинуть Кассандру и вернуться к Postgresql. Это был творческий эксперимент. Он наполовину удался. Я доволен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:24 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, - чтобы гарантировать в пределах земного шара достаточно не совпадения PK. Одно из решений GUID - при GUID реплика не ломается ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:25 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Хм... это мысль. Впрочем я пока думаю выкинуть Кассандру и вернуться к Postgresql. Это был творческий эксперимент. Он наполовину удался. Я доволен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:27 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mayton, - чтобы гарантировать в пределах земного шара достаточно не совпадения PK. Одно из решений GUID - при GUID реплика не ломается Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:32 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton PetroNotC Sharp mayton, - чтобы гарантировать в пределах земного шара достаточно не совпадения PK. Одно из решений GUID - при GUID реплика не ломается Почему? Вопрос на второе утверждение или на первое? Я делал реплику руками. Что там должно ломаться? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:36 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp- чтобы гарантировать в пределах земного шара достаточно не совпадения PK. Одно из решений GUID Счётчики в данном случае, насколько я понял, используются совсем не для генерации ПК. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:44 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mayton пропущено... Почему? Вопрос на второе утверждение или на первое? Я делал реплику руками. Что там должно ломаться? Ты не мог делать реплику "руками". Репликация в распределённых БД это не одноразовое админское действие. Это вечный процесс. Однажды начавшись для конфигурации - он никогда не заканчивается. Или закончится с ре-конфигурацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:46 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, Вот нет логики в твоей фразе. Почему я не мог делать репликацию "вечно"? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:59 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Почему я не мог делать репликацию "вечно"? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:01 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Я тоже понял что Не для репликации. Хотел уточнений - для чего же тогда?)) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:02 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
AmKad PetroNotC Sharp Почему я не мог делать репликацию "вечно"? В меню юзвери выбирали - синхронизировать с головным ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:03 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, ништяк. Буду к тебе обращаться за консультациями. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:04 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
AmKad, Руками программисты (настоящие) называют написание кода без использования либ чужого. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:05 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp В меню юзвери выбирали - синхронизировать с головным ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:05 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp AmKad, Руками программисты (настоящие) называют написание кода без использования либ чужого. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:07 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
AmKad PetroNotC Sharp В меню юзвери выбирали - синхронизировать с головным ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:09 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
AmKad, Наверно не настоящий прогер. В оракле не на всех версиях есть штатная. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:12 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Самописная репликация, процессы которой инициируются без участия бизнес-пользователя - недостижимый идеал? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:24 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
AmKad, Можно и так. Это ты просто прицепился к слову "руками". ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:44 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Можно и так. Это ты просто прицепился к слову "руками". ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:03 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC SharpХотел уточнений - для чего же тогда?)) Внезапно, счётчики способны использоваться в качестве счётчиков. В данном случае - пакетов DHT. В этом случае с их репликацией нет проблем. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:22 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
AmKad, ) Вы правы. Слово вечно тоже было. Оно было от ТС и такое вкусное что я тоже не мог пройти мимо) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:41 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov PetroNotC SharpХотел уточнений - для чего же тогда?)) Внезапно, счётчики способны использоваться в качестве счётчиков. В данном случае - пакетов DHT. В этом случае с их репликацией нет проблем.ну вот эта связь как раз от меня ускользает. Это же транспортный уровень? Пакеты считать? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:43 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC SharpЭто же транспортный уровень? Пакеты считать? Это прикладная задача. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 19:04 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Я поднял руки к верху. Не понял моделирования и модели данных для прикладной. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 19:09 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Давайте в тему сетевых пакетов. Вот это "ухо" я написал для экспериментов. Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Ухо слушает входящие запросы типа ping, find_node e.t.c. и печатает на скрин. Вот то что декодировалось успешно - содержит node_id. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Обратите внимание на запросы get_peers, find_node. Кто тут есть Питонщики. Посмотрите code-review где я чего неправильно написал. Вот в этих декодированых сообщениях и читается модель тех данных которую я пытался впихнуть в Cassandra. Это к вопросу о доменной области. Вот. Смотрите. Вот она. Доменная область. И вот спека которую я начал читать http://www.bittorrent.org/beps/bep_0005.html ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 20:00 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, А почему используется UDP, а не TCP ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 21:25 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Это не моё решение. Так было задумано. Это-ж типа протокол discovery. Поиска узлов. Как dns. И данных. А их тыщи. И к каждому из них сокет создавать - накладно. А тут как dns. Пинганул. Че-то спросил и никаких больше обязательств. Там постоянное нужно только на последней фазе. Когда уже есть peer и он владеет каким-то файлом который надо качать. Вот там уже лучше идёт tcp. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 21:46 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton UDP_IP = "0.0.0.0" UDP_PORT = 51413 Исходник рабочий. Но чтобы почувствовать движняк входящих запросов - надо попробовать поиграть с разными номерами портов. Я таковых насобирал вот столько. Здесь число - это номер порта который надо слушать. Код: plaintext 1. 2. 3. 4. 5. 6.
И перед запуском тулы желательно запустить любой из dht-клиентов минут на 5. Он начнет пинговать соседей. Прогреет себя. И потом уже соседи будут пинговать вас. И не забудьте на роутере разрешить порт-маппинг даннх портов из внешнего интернета на свой текущий LAN IP. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 21:50 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Подсобирал еще сведений. Пока от Кассандры не избавился но уже написал адаптеры этой-же логики персистенса под Postgres. Сведенья по нодам и хостам Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Счетчики Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Сведенья по поисковым операциям я еще не обрабатываю Наблюдения. 1) События класса announce_peer - самые редкие. 2) По прежнему примерно четверть всего трафика не поддается дешифровке хотя очевидно что это bencode проткол только с offset-ом. Это всё таки Distributed Hash только формируется другим приложением я так думаю. Код: plaintext 1. 2. 3. 4.
3) Я не могу себя проверить. Как убедится что на реквест get_peers я вернул корректный результат? Тоесть как другие участники сети могут сообщить мне что я - флудер или формирую ответы не по протоколу? 4)Как понять в каком формате ожидаются ответы о peers? Nodes? Вот семпл из документации. Код: plaintext 1. 2. 3. 4. 5.
5) Что это? "values": ["axje.u", "idhtnm"] ? Имена в формате domain-names? Если у меня их нет. Можно ли толкать IPv4 адреса? 6) Что мне делать с токеном? Я его сам генерю? Или возвращаю как кукис? 7) Как работает роутинг в DHT? Они пишут Код: plaintext 1. 2.
Тоесть я должен вычислять сложение по модулю 2 и искать соседей у которых id по метрике ближе к моему искомому? 8) Как лимитировать свой трафик? Сколько раз я могу долбануть UDP пакетом по соседу? Так чтобы не попасть во временный троттл или бан. Из опыта знаю что если не ставить ограничители на send_udp то можно даже свою сеть повалить. Это конечно маловероятно но если я буду просто циклиться или ошибаться в алгоритме роута то я буду эдаким UDP-флудером. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2021, 00:21 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017244]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
106ms |
get tp. blocked users: |
1ms |
others: | 293ms |
total: | 484ms |
0 / 0 |