|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Добрый день! Пишу небольшой бот, и столкнулся с проблемой - где хранить произвольный контекст в формате json. Хочу его запихать в колонку text рядом с записью соответствующего собеседника. Таким образом при каждом сообщении это поле может перезаписываться - космоса там не будет, вряд ли выйдет за 500 символов, чаще будет 10-50 символов. Но я в postgresql новичок, и не могу найти очевидных ответов на то, как БД будет вести себя в случае частого update по полю с типом text значениями переменной длины. Не начнет ли у меня раздуваться база из-за частого устаревания старых значений в пользу записи новых? Подскажите пожалуйста, как лучше поступить? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2018, 23:13 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Толикman, лучше вообще не использовать СУБД для подобных задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 10:13 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Scott Tiger, СУБД СУБД тут рознь. В Oracle с каждый раз физическим обновлением этой строки, все будет в порядке. А в PG настроить вакуум поагрессивнее, и все опять в порядке. Не? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 10:27 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Hawkmoon, дело тут не в особенностях СУБД, хотя, конечно, постргес на постоянных апдейтах одной строки даст жару :) Но СУБД для такой задачи - лютый оверкилл. Как следствие, получим повышенное потребление ресурсов, дополнительные зависимости, потребность в дополнительных компетенциях эксплуатанта, дополнительные риски, в т.ч. ввиду отсутствия должных компетенций, ну и т.д и т.п. Если стоит задача хранить "контекст" постоянно - я бы сделал на текстовых файлах в ФС, если "контекст" после ребута не нужен - вообще хранил бы в памяти приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 10:38 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Scott Tiger, Ну вот и ответы на оба вопроса ТС ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 12:09 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
ТоликmanПишу небольшой бот, и столкнулся с проблемой - где хранить произвольный контекст в формате json. Хочу его запихать в колонку text рядом с записью соответствующего собеседника. внезапно в постгресе есть типы json и jsonb, которые предназначены для хранения json ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 13:46 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Karbafos, я видел такой тип, но так же не нашел то, как он будет храниться. Этот тип лишен таких проблем как text в части съедания места из-за частой перезаписи? (без настроек vacuum) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 13:52 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Scott Tiger, Спасибо за разъяснения! Правда вопросов только увеличилось... ну а если пользователей будет 1 000, а если 10 000 ? хранить все в файлах? Я думаю, что БД должна решить вопросы быстрого доступа к нужным данным лучше, чем файловая система... Просто при написании бота нет такого понятия - как сессия, и поэтому надо эту самую сессию реализовать самому. Храня в ней контекст, но только на стороне сервера. И это однозначно БД. Срок хранения может быть разным, от нескольких секунд до десятков минут. Я возможно не прав, но пока не увидел альтернативного решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 13:57 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Или лучше так: вообще реализовать отдельную таблицу для кэша (с json) с автовакуумом и fillfactor 50, в качестве primary key взять значения primary key таблицы юзеров (без внешних ключей), При каждой выдаче джоинить юзера с его кэшем. Неактуальный кэш удалять раз в сутки. Такое решение имеет место быть адекватным? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 14:21 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
ТоликmanТакое решение имеет место быть адекватным? Никакое решение, включающее в себя json не может быть адекватным по определению. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 14:45 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Hawkmoon Ну вот и ответы на оба вопроса ТС Только неправильные. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 15:30 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Ваше утверждение само неадекватное. Тип JSON вместо TEXT полезен, если нужно делать поиск в базе по элементам JSON. TEXT подходит, чтобы просто хранить. Поскольку ни один знаток PostgreSQL не высказался, то отмечу, что я сам применяю тип text для большинства текстовых полей, и не наблюдаю излишнего расхода места на диске или необходимости частого VACUUM из-за этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 15:38 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Partisan M, Это же специалист по Delphi и Firebird. Он точно знает толк в адекватности, в 2018 году. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 15:49 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Partisan MHawkmoonНу вот и ответы на оба вопроса ТС Только неправильные. Критикуешь - предлагай (с) Мне тоже не нравится идея 1000 апдейтов в час у одной строки в Pg. В Oracle - норм, но для ботостроителя Oracle неприменим по другим причинам. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 15:52 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
ТоликmanKarbafos, я видел такой тип, но так же не нашел то, как он будет храниться. Этот тип лишен таких проблем как text в части съедания места из-за частой перезаписи? (без настроек vacuum) у тебя что, 300к в секунду перезаписей, что так беспокоишься о допнастройках автовакуума? если кратко json хранится as is, но более тупой jsonb хранится в бинарном виде, может быть проиндексирован всякими типами индексов ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 16:51 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Толикman, пара вопросов: 1. Сессия, которую Вы хотите хранить до нескольких десятков минут, должна ли быть доступна с других экземпляров приложения? Или проще: у Вас кластер серверов обеспечивает работу этого бота или один сервер? 2. При перезапуске сервера нужно ли сохранять состояние сессии на постоянном хранилище (диске, СУБД и т.п.) или его можно потерять без вреда? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 09:33 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Partisan MТип JSON вместо TEXT полезен, если нужно делать поиск в базе по элементам JSON. Если по элементам JSON нужен поиск, то данные из него следует раскладывать непосредственно в базу, а не закапывать в плохо структурированную братскую могилу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 14:54 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Scott Tiger, автор1. Сессия, которую Вы хотите хранить до нескольких десятков минут, должна ли быть доступна с других экземпляров приложения? Или проще: у Вас кластер серверов обеспечивает работу этого бота или один сервер? Один сервер авторПри перезапуске сервера нужно ли сохранять состояние сессии на постоянном хранилище (диске, СУБД и т.п.) или его можно потерять без вреда? Лучше хранить, меньше проверок в коде придется делать. Но если это значительно облегчит существование, то можно и восстанавливать кэши. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2018, 22:24 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Толикman, я бы просто в памяти тогда хранил. Ну или что-то совсем примитивное типа Redis использовал, если уж очень хочется (но зачем?). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2018, 23:29 |
|
тип text как кэш для конкретной записи
|
|||
---|---|---|---|
#18+
Scott Tiger, огромное спасибо! Redis - то что доктор прописал. У меня работают два изолированных скрипта (один для вебхуков, второй параллельно сам инициирует коммуникации), и мне нужен такой посредник, который и будет кэшем заниматься... Redis самое то - не сталкивался еще с ним. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2018, 00:48 |
|
|
start [/forum/topic.php?fid=53&msg=39738644&tid=1995461]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 165ms |
0 / 0 |