@pgsql

Страница 64 из 1062
Sergey
07.08.2016
13:38:13
Это разные вещи

Konstantin
07.08.2016
13:38:30
А то бывает сдохнет два слева и мастер

Не разные, разные они пока под попой печка не стоит и греется

А то вариант один -вы там держитесь :-)

Google
Sergey
07.08.2016
13:46:38
Не разные, разные они пока под попой печка не стоит и греется
Выкатил битый релиз в прод, дропнул часть данных и никакая реплика не поможет. Если только она не с latency

И, опять же, говоря про потерю данных из-за смены мастера без write concern = majority. Остальные базы тоже потеряют данные, только при этом ещё вручную (или скриптами) надо будет мастер переключать.

Konstantin
07.08.2016
14:42:32
В релиз это да

Ну тогда расстрел за план отката

И тестовую среду

ptchol
07.08.2016
14:54:07
И 50 терр на одной тачке чтоли ?

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

Phil
07.08.2016
15:29:57
а какая штука не закостенелая а вся из себя такая прогрессивная, с хипстерами и единорогами?
Клоны MySQL вполне себе не закостенелый. У них есть проблемы, практически нет реплики, но таки закостенелости там нет. Вон, у Марии там и реплика вроде поправленная (да я видел мнение Царева на тему правки реплики Марии). Но мы про закостенелость

Pavel
07.08.2016
17:57:22
В общем случае нельзя сказать что постгре закостенелая, ведь это, наверное, первая реляционная субд, которая ввела у себя поддержку работы json, то есть тут сработано очень инновационно.

Pavel
07.08.2016
18:00:43
Возможно, не знаю точно. Ну тогда с поправкой - первая среди опенсорсных

Да и вообще фишек в нем не в пример семейсту mysql больше, как это можно называть закостенелостью? Просто отсутствие концентрации на теме репликации.

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

Google
Phil
07.08.2016
18:05:02
а вот "кластер" который инит - я по сей день не понял что зачем и чем грозит

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

Vadim
07.08.2016
18:09:16
эмм...ну это уж вы точно перегнули. Просьба не утраивать холивар. Если критиковать то конкретно.

И уж точно не нужно рассказывать про замечательный mysql. Далеко не все так радужно в датском королевстве.

Sergey
07.08.2016
18:10:34
вы небось еще и python балуетесь?
Я не разделяю набросов на postgres, но с Python-то что не так?

Phil
07.08.2016
18:11:27
Vadim
07.08.2016
18:11:45
уважаемые коллеги, давайте не будем чат превращать в разборки кто круче. Мне кажется он не для этого создавался Олегом.

Taras ?
07.08.2016
18:12:57
с любителями python что-то не так (в большинстве имхо) в почти любом чате найдется мажорчик который заявляет морща носик "все что не python - фи-фи-фи..." смотрю и сдесь этот тон "фи-фи-фи..."

Phil
07.08.2016
18:13:07
И уж точно не нужно рассказывать про замечательный mysql. Далеко не все так радужно в датском королевстве.
конечно не так радужно. и одно из самых безрадужных мест там как раз реплика. док по ней куча и заводится она легче, но правда в том, что в итоге использовать ее нельзя

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

Vadim
07.08.2016
18:14:51
Повторюсь, это чат о PostgreSQL. Давайте не будем устраивать очередной холивар. Заранее спасибо :)

Taras ?
07.08.2016
18:15:06
?

Alex
07.08.2016
18:48:11
Не холивара ради, а абсолютно реальный кейс. Вот нам нужно хранить метаданные про файлы. Файлов - порядка 500млн. Есть с десяток общих полей - размер, несколько типов хэшей, даты, magictype, ну и подобное. При это есть еще несколько десятков полей, которые присутствуют только у некоторого множества этих записей. Причем, они появляются хаотично - нельзя заранее предположить весь набор метаданных, который будет у файла. Плюс, жизнь меняется и периодически мы начинаем добавлять еще какие-то метаданные, но только к новым записям - старые остаются со старым набором (но если попадут в обработку, то будут обновлены с новыми полями). По части полей, конечно, есть индексы. Из этой кучи нужно периодически выбирать записи с различными наборами значений полей. Сейчас эта бд - на монге. Отсутствие схемы, sparse индексы позволяют относительно без боли решать задачу на двух средних серверах. Как такая задача могла бы лечь в постгрес? Особенно интересны моменты с разнообразными наборами полей и разряженными индексами.

Vadim
07.08.2016
18:50:02
Думаю JSONB вам бы помог

Alex
07.08.2016
18:52:38
Я конечно читал про jsonb, но у меня ощущение , что он еще сырой. И вот тут даже мелькало, что вроде постгрес не умеет в нем уникальные индексы - это тоже печаль

Надеялся, что кто-нибудь расскажет про jsonb на последнем pgdays в питере, но что-то никто не обмолвился. =(

Alexander
07.08.2016
18:55:23
Если сырость беспокоит, тогда hstore

Dmitrii
07.08.2016
18:56:57
Меня больше всего убивает адовый синтаксис для JSONB.

Это не то, к чему меня жизнь готовила

Google
Dmitrii
07.08.2016
18:57:19
Молю о пощаде, как разработчик!

ptchol
07.08.2016
18:58:58
помоему по jsonb нельзя построить частичный индекс по значению ?

или я ошибаюсь ?

Если сырость беспокоит, тогда hstore
я б тут кассандру взял )

Dmitrii
07.08.2016
19:00:31
я б тут кассандру взял )
Из пушки по воробьям?)

Alex
07.08.2016
19:00:34
Если сырость беспокоит, тогда hstore
Простите, но мне нужно нечто большее, чем хэштаблица ...

Alexander
07.08.2016
19:01:12
Тогда забить и юзать кошерный jsonb

Alex
07.08.2016
19:01:17
Коллеги, речь про постгрес, давайте не уходить в оффтопики. Как решить такую задачу на нем, гипотетически?

ptchol
07.08.2016
19:01:54
Из пушки по воробьям?)
ну хз если там старт на 500м записях, и будут новые. Возьму что то, что легком масштабируется из коробки )

Pavel
07.08.2016
19:02:18
Ну так и решать, 10 постоянных полей кладем в схему, остальное в json/hstore. Дальше экспериментируем с индексами.

Vadim
07.08.2016
19:03:22
Да, конечно, функционал JSONB в PostgreSQL не такой большой как в документоориентированных БД. Поэтому попробую привести цитату из документации. Не нужно думать что JSON в слоне это замена NoSQL

Представлять данные в JSON можно гораздо более гибко, чем в традиционной реляционной модели данных, что очень привлекательно там, где нет жёстких условий. И оба этих подхода вполне могут сосуществовать и дополнять друг друга в одном приложении. Однако, даже для приложений, которым нужна максимальная гибкость, рекомендуется, чтобы документы JSON имели некоторую фиксированную структуру. Эта структура обычно не навязывается жёстко (хотя можно декларативно диктовать некоторые бизнес-правила), но когда она предсказуема, становится гораздо проще писать запросы, которые извлекают полезные данные из набора "документов" (информации) в таблице. Данные JSON, как и данные любых других типов, хранящиеся в таблицах, находятся под контролем механизма параллельного доступа. Хотя хранить большие документы вполне возможно, не забывайте, что при любом изменении устанавливается блокировка всей строки (на уровне строки). Поэтому для оптимизации блокировок транзакций, изменяющих данные, стоит ограничить размер документов JSON разумными пределами. В идеале каждый документ JSON должен собой представлять атомарный информационный блок, который, согласно бизнес-логике, нельзя разделить на меньшие, индивидуально изменяемые блоки.

Alex
07.08.2016
19:03:32
напоминаю, по "непостоянным" полям тоже нужны индексы

Vadim
07.08.2016
19:04:21
по непостоянным вы можете только создать GIN на весь JSON. Но там будет только проверка на равенство

Alex
07.08.2016
19:05:47
по непостоянным вы можете только создать GIN на весь JSON. Но там будет только проверка на равенство
интересно. Но проверки на равенство маловато, есть даты и интересны >< . Хотя худо-бедно уже наверное можно выкрутиться...

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

Vadim
07.08.2016
19:06:48
Да, вы правы. Индекс будет большой

Alex
07.08.2016
19:07:07
На 500+М это проблема =(

Pavel
07.08.2016
19:08:01
А метаданные прям бесконечно добавляются и добавляются?

Т.е. количество разных столбцов растет? Всегда новые ключи?

Google
Alex
07.08.2016
19:08:53
Угу. 100-500 тыс за сутки примерно только новых, + обновление старых

Pavel
07.08.2016
19:09:13
Я имею в виду столбцы а не строки

Alex
07.08.2016
19:09:18
Нет, кол-во "столбцов" растет не постоянно

Pavel
07.08.2016
19:09:48
Можно по мере появления новых создавать под них колонки в бд

Alex
07.08.2016
19:09:56
Просто сегодня так, а завтра заказчик захочет еще и вот это сохранять - и нужно начать сохранять для новых, и обновлять для старых по мере доступа

Vadim
07.08.2016
19:10:05
для уменьшения идекса можно вопспользоваться классом операторов jsonb_path_ops

Alex
07.08.2016
19:10:14
Новые колонки на 500M записей?

Pavel
07.08.2016
19:11:48
Да вроде должно быстро работать. Или это я путаю с concurrent index?

Alex
07.08.2016
19:12:30
Если вы про "в лоб", т.е alter table, то это.. м, очень долго =)

Ivan
07.08.2016
19:13:13
Новые колонки на 500M записей?
Nullable быстро сделается же

Alex
07.08.2016
19:13:15
Хотя, может я отстал от жизни и в последних версиях есть некая магия?

Vadim
07.08.2016
19:13:56
нет, магии нет. проблем можно избежать только если вы добавили пустой столбец.

Pavel
07.08.2016
19:14:30
Ну вот, добавили пустой, а потом уже начинаем добавлять строки с данными в этом столбце.

Alex
07.08.2016
19:24:35
Спасибо. Завтра попробую уточнить, где там с модификацией таблицы были подводные камни =) Создавать колонки руками по мере надобности - в общем-то может и сработать. Поддерживать код посложнее, но уже похоже на вариант =)

Dmitrii
07.08.2016
19:34:02
ну хз если там старт на 500м записях, и будут новые. Возьму что то, что легком масштабируется из коробки )
Нет, ты не прав! Надо купить сервер где будет 128 CPU и пол-террабайта оперативки, ведь все ресурсы убухиваются, чтобы постгрес отлично масштабировался вертикально. Но проблемы нищих веб-девелоперов никого не интересуют :)

Alex
07.08.2016
19:47:52
Офтопик, но масштабировать монгу из коробки тоже не крем-броюле. Шардинг данных напополам - это по нормальному нужно 4 сервера примерно одинаковой мощности - 2 шарды и каждая - в репликасете. Ну вот мои 2 сервака под монгу сейчас стоят порядка 500-600тыс руб. Вот так просто потратить 1млн на шардинг - это тоже не для бедных веб девелоперов =)

Да, и не забываем, что +1 шарда = +2 сервера, ибо должны быть в реплике...

Sergey
07.08.2016
19:49:58
Да, и не забываем, что +1 шарда = +2 сервера, ибо должны быть в реплике...
Шард можно и не из реплик делать, в принципе. Если за данные не страшно)

Alex
07.08.2016
19:50:18
Ну можно , да =) И бэкапы не делать, заодно уж =)

Sergey
07.08.2016
19:50:58
Ну просто это не проблема монги, в любой другой базе тоже надо минимум мастер-слейв желать на каждый шард

Google
Sergey
07.08.2016
19:51:30
Арбитр лёгкий и его можно хоть на виртуалке поднять. Конфиг сервера тоже можно совместить.

Alex
07.08.2016
19:51:38
Да ну я ж не говорю, что она виновата. Я просто замечаю, что шардинг в монге - не магия.

Про арбитра речи не идет, с ним всё понятно.

Просто если у вас отвалится шарда и она не в реплике - вы встряли.

И я уже не буду вспоминать про репликацию в монге - это тоже отдельная песня, но будет уже совсем оффтопик

Sergey
07.08.2016
19:55:10
Тут есть отдельная группа по монге, можно там)

Alex
07.08.2016
19:55:56
Я уже там =)

Aleksandr
07.08.2016
20:09:47
Sergey
07.08.2016
20:26:38
MongoDB Russian https://telegram.me/MongoDBRussian

Но там достаточно тихо обычно

Pavel
07.08.2016
21:35:48
Вобщем я тут померял немного

alter table test add column f16 varchar(512); ALTER TABLE Time: 1006.393 ms

На таблице из 111млн. записей, 15 колонок, без нагрузки.

Если параллельно запустить запрос insert into ... select from на пару миллионов строк, то создание колонки сильно замедляется.

Хотя не, вру, там запрос на вставку не пару миллионов а 27 миллионов строк.

Alex
07.08.2016
21:52:26
Вроде alter table требует эксклюзивного лока таблицы. О каких запросах речь?

Pavel
07.08.2016
21:55:02
Да но в случае если мы добавляем колонку с null значением по дефолту, то лок краткосрочный :)

Угу. 100-500 тыс за сутки примерно только новых, + обновление старых
Вроде и не такая большая нагрузка выходит, пару десятков запросов в секунду. На мощных серверах должно все быть ок.

Alex
07.08.2016
22:03:51
Ну не полностью всё ок, но в целом работает. Особо активно обновляющиеся данные (до 1000 апдейтов в секунду) таки приходится выносить в отдельные базы (тоже монга на том же сервере, но документов меньше). Чудес не бывает, 128гигов памяти не хватает чтобы и индексы держать и данные кэшить.

простите, или вы про постгрес? :) Монга тянет. С постгресом пока только смутно ясно как это можно было бы организовать.

Pavel
07.08.2016
22:07:18
Да, я про постгрес. Мне кажется, тут вариант - поставить параллельно новый сервер с постгресом, и запросы с продакшена дублировать на него также. И можно измерять разные метрики.

Страница 64 из 1062