
here1am
07.12.2016
19:09:07
ну поболтать там можно

KOT
09.12.2016
01:19:36
Кто-нибудь ставил такие эксперементы?
https://stackoverflow.com/questions/778534/mysql-on-duplicate-key-last-insert-id
Нужно, чтобы вставка в таблицу с unique индексами не выдавала ошибки, и в добавок возвращала уже ранее существующий ИД.

lemi
09.12.2016
07:53:54
на Postgre както так
insert into tbl (col1, col2, col3, ...)
select
nextval('tlb_id_seq'),
t.col1,
t.col2,
...
from (values()) t (col1, col2....)
where not exists (
select 1 from tbl where tbl.col1 = t.col1 and tbl.col2 = t.col2 ...
) returning id

Google

тнн Itjunky
09.12.2016
14:35:21

KOT
09.12.2016
14:42:21
Проще ходить скриптом и склеивать нужное.

тнн Itjunky
09.12.2016
14:56:28
Ясна

Fike
09.12.2016
16:26:25
да выкиньтевы вообще идею об автоинкрементах
тот, кто их придумал, был пьян

KOT
09.12.2016
16:41:53

Fike
09.12.2016
16:44:51
д'артаньян все же

Akzhan
09.12.2016
16:47:16
ничего не понял. есть же классика,
1) uuid
2) автоинкремент с шагом N. где N - максимальное число мастеров.
И есть одна мысль - если у вас настоящий мастер-мастер, то, скорее всего, у вас нет бойцов, способных его нормально готовить.

KOT
09.12.2016
16:48:02
Вариант второй будет

Akzhan
09.12.2016
16:49:19
Это очень дорого, в разработке и в поддержке. Я бы предпочел независимые БД с очередями сообщений. Ну да ладно

Sergey
09.12.2016
16:51:03
Читал тут на днях внутреннюю статью, где хвалились tps-ами на мастер-мастер, не прошло и недели, как он у них сломался.

Google

KOT
09.12.2016
17:34:08

Akzhan
09.12.2016
17:35:24
transactions per second. а пруф не помешал бы )

Sergey
09.12.2016
17:37:14

nikoinlove
09.12.2016
17:40:35
один мастер отстал а другой нет. а потом каак записали не того в отставший

KOT
09.12.2016
18:13:25

Fike
09.12.2016
18:15:29

nikoinlove
09.12.2016
19:20:14
Никак же, это ж не шарды

тнн Itjunky
09.12.2016
19:20:43

Fike
09.12.2016
19:27:35
Никак же, это ж не шарды
каждый мастер же принимает (че хочет) в том размере, в котором сможет, не консультируясь с остальными, разве нет?

nikoinlove
09.12.2016
19:27:54
ага а потом еще принимает то же самое от других мастеров
в сумме нагрузки больше и он ломается

Akzhan
09.12.2016
19:30:12

Fike
09.12.2016
19:30:17
а

тнн Itjunky
09.12.2016
19:31:00
Бггг, боец, который говорит, что в бой идти не надо? :)

Akzhan
09.12.2016
19:31:30
обход - хорошая тактика, во многих случаях

KOT
09.12.2016
20:10:17
Ты путаешь данный вариант с RAID0 / RAID10 массивами.

тнн Itjunky
09.12.2016
20:16:58
Единственное, что я встречал на работе и с СуБД MySQL, так это вариант, когда слэйв делается либо для чтений, либо для бэкапов, что бы не тормозил мастер на момент снятия дампа.
Всё остальное видимо никто не умеет готовить нормально. Потому получили признание всякие NoSQL и шардообразные вариации.

Google

KOT
09.12.2016
20:19:57

nikoinlove
09.12.2016
20:23:42
Так у nosql принцип такой же, просто изза внутренней простоты они шардируются из коробки
Что тоже не всегда хорошо
Монгос умеет занять весь кластер решардингом вместо работы

тнн Itjunky
09.12.2016
20:26:05
Хорошо мне с моими smalldata проектами, которые в sqlite прекрасно живут =)

nikoinlove
09.12.2016
20:29:23
Ну эскулайт может много в себя вместить. У него с конкаренси не очень

KOT
09.12.2016
20:32:17

Sergey
09.12.2016
20:34:07

nikoinlove
09.12.2016
20:34:35

KOT
09.12.2016
20:35:49
Моя задача:
Приходит пользователь А из Бонуэс-Айреса, ему надо отдать контент с минимальной задержкой, секунда не более.
А спустя "очень короткий промежуток времени" приходит пользователь Б из Сиднея, и ему я тоже должен отдать контент.
И допустим им нужен один и тот же контент, только вот проблема в том, что после посещения юзера А квота рекламодателя на контент исчерпана. Об этом должна вся система знать в идеале не более чем через 5 секунд, после того, как этот пользователь А зашёл.

nikoinlove
09.12.2016
20:36:22
Так их приземлять надо в разные страны, а ты хочешь на бд это свалить
А "знать вся система" не требкет синхронности же

KOT
09.12.2016
20:36:56
И того задача и тому и другому отдать нужный контент очень быстро, но чтобы друг о други "знали"
Так вот в моём видение оптимального расклада "очень короткий промежуток времени" это не более секунды, а "знали" не более 5 секунд.
Там стоят сервера со скриптами.
Таких точек будет 10-12

Sergey
09.12.2016
20:39:16
Балансировка на базе днс?

Google

KOT
09.12.2016
20:39:28
Route53 от амазона
Это не столько балансировка
На нагрузку в принципе наплевать, это для того, чтобы юзер получал данные с сервера, который к нему по пингу ближе всего

Fike
09.12.2016
20:40:18

KOT
09.12.2016
20:40:52

Sergey
09.12.2016
20:41:51

Fike
09.12.2016
20:41:57
ну да, тебе нужна не централизованная система, а несколько датацентров, каждый из которых едва знает о существовании остальных
потому что иначе описанные требования возможны на бумаге, а на деле ты раз в день минимум будешь ловить отваливающийся sla

Admin
ERROR: S client not available

KOT
09.12.2016
20:42:30

тнн Itjunky
09.12.2016
20:42:35

KOT
09.12.2016
20:43:03

Fike
09.12.2016
20:43:19
service layer agreement, те ограничения по вермени, которые ты описал
я бы просто забил на эти пять секунд. это реально в хороших условиях, но все равно пробьет ногу рано или поздно

Sergey
09.12.2016
20:44:03

Fike
09.12.2016
20:44:06
если рекламодатель исчерпает бюджет на +5 баксов - это будет проблема дешевле, чем поддержвать все это в живом состоянии

KOT
09.12.2016
20:44:07
Ну 5 секунд это 95% идеал
На пиках будет простреливать, и пускай, терпимо

тнн Itjunky
09.12.2016
20:44:29

Sergey
09.12.2016
20:45:30
И этот самый edns-client-subnet поддерживают далеко не все рекурсоры и авторитативный сервер будем ориентироваться не по тому где находится клиент а по тому, где находится его рекурсивный сервер

Google

Sergey
09.12.2016
20:46:46
Ну и плюс промежуточные кеши

тнн Itjunky
09.12.2016
20:47:12
Получается, что даже если 300 до другого конца планеты, плюс 300 обратно, остаётся ещё 400мс на выдачу результата

KOT
09.12.2016
20:48:10
Это ж не обязательное условие что бы уложиться в секунду.
Текущие задержки от России до Америки не более 300мс
Вооооооооооот. Уже не плохо. НО. Это только пинг. А ещё вычисления, ещё несколько операций с базой. И того набегает. Я начал с Ирландии, потом поставил слейв в Калифорнии, потом сказали Азию добавить, поставил в Сингапуре, ну по моей логике главное было скриптосервер поближе к юзеру подтянуть, и дать ему реплику. А тот факт, что там идут записи, я прошляпил. И пишут мне манагеры "Чё за фигня, у нас потери трафика, ТДСка долго грузится!" я проверяю, а там 6 секунд на вшивый редирект. ШЕСТЬ СЕКУНД. Начал копать. Ну да, клиент до скриптосервера долетает за 50мс, а скриптосервер до мастера тратит по полторы секунды на одну запись, а их часто до 3 штук поочерёдно. ТАДАМ.


[Anonymous]
09.12.2016
20:56:07
По вашему взгляду - какая база лучше всего подходит для очень узкоспециализированной задачи - выборки по часовому поясу. Т.е. есть поле с датой и вот эти строки мы и будем запрашивать.
Несколько миллиардов записей.
Запросы типа "покажи записи от 10.10.2010 до 10.10.2011 по МСК".
Благодарю, если кто-то что-то подскажет.


KOT
09.12.2016
20:56:46
Так вот. Я поднял сервера на всех локациях доступных в амазоне. Устроил получасовой пинг всех на всех. И нарисовал карту скоростей между точками. Выделил 3 группы: Америка, Европа, Азия. В каждой по сумме пингов выявил сервер, который наиболее идеально минимальный пинг до всех других в своей группе имеет. И это будут у меня 3 мастера.
Итого схема будет такая. юзер А (из задачи сверху) будет направлен на сервер в Сау-Паулу, все нужные селекты он запросит с слейв-реплики находящейся там же, а когда ему нужно сделать запись, он её сделает на Мастер сервере в Ohio, на это уйдёт меньше секунды, потом эта инфа через ещё секунды-полторы окажется в Сингапуре, где стоит второй Мастер, и ещё через столько же в Сиднее, где стоит слейв реплика от Сингапурского мастера.
А в выдаче всех бы вновь свдигал обратно построчно до нужного отступа по таймзоне


тнн Itjunky
09.12.2016
20:58:56
Вооооооооооот. Уже не плохо. НО. Это только пинг. А ещё вычисления, ещё несколько операций с базой. И того набегает. Я начал с Ирландии, потом поставил слейв в Калифорнии, потом сказали Азию добавить, поставил в Сингапуре, ну по моей логике главное было скриптосервер поближе к юзеру подтянуть, и дать ему реплику. А тот факт, что там идут записи, я прошляпил. И пишут мне манагеры "Чё за фигня, у нас потери трафика, ТДСка долго грузится!" я проверяю, а там 6 секунд на вшивый редирект. ШЕСТЬ СЕКУНД. Начал копать. Ну да, клиент до скриптосервера долетает за 50мс, а скриптосервер до мастера тратит по полторы секунды на одну запись, а их часто до 3 штук поочерёдно. ТАДАМ.
Да, я понял о чём речь. Тут и правда нужно что-то похожее на мульти-мастер...

[Anonymous]
09.12.2016
20:59:11
Вот я подумал, может быть есть какое-то специализированное решение для таких запросов.

KOT
09.12.2016
21:00:18
И как скорость по нескольким миллиардам?

[Anonymous]
09.12.2016
21:00:30
Ну смотря какие запросы...
Некоторые отрабатывают в фоне раз в X минут/часов.

KOT
09.12.2016
21:00:46
Арендуете сервак или прямой доступ к железу?

[Anonymous]
09.12.2016
21:00:48
Некоторые в живом режиме.

KOT
09.12.2016
21:01:38
Просто если бы была своя железка в НИИ (ну как пример), можно было бы её затюнить под эту задачу, если она у вас настолько генерально важная.