@MongoDBRussian

Страница 190 из 342
yopp
16.02.2018
16:50:37
И включал балансировщик

Max
16.02.2018
16:50:54
то есть останавливаем балансер и пилим. понял.

yopp
16.02.2018
16:51:28
Балансировщик лучше всегда выключать, когда вы какие-то изменения вносите в правила или настройки шарда

Max
16.02.2018
16:51:39
а те чанки, что уехали в Азию, можно оставить там же и там же распилить по splitAt, чтобы не гонять уже перегнанное так?

Google
yopp
16.02.2018
16:52:06
Можете из распилить и добавить ренджи по тому, что там должно остаться, да

Max
16.02.2018
16:54:37
спасибо я вот прям практически бесконечно признателен за ликбез. тесты в пятницу вечером ставить не буду, уже дождусь программеров в начале рабочей недели.

Dmitrii
17.02.2018
14:45:03
блин вот монго разрабы красавчики, недавно changefeed добавили, теперь еще и мультидокументные транзакции обещают

Sergey
17.02.2018
20:54:08
Всем привет, был rs с тремя нодами, primary прилег, осталось два secondary и ни один не хочет становится primary, как то можно принудительно сказать одной из нод: ты теперь primary?

yopp
17.02.2018
21:01:11
Заведите арбитра

Sergey
17.02.2018
22:20:08
2018-02-17T22:05:40.374+0000 I COMMAND [ftdc] serverStatus was very slow: { after basic: 0, after asserts: 0, after backgroundFlushing: 0, after connections: 0, after dur: 0, after extra_info: 1600, after globalLock: 1600, after locks: 1600, after network: 1600, after opLatencies: 1600, after opcounters: 1600, after opcountersRepl: 1600, after repl: 1600, after security: 1600, after storageEngine: 1600, after tcmalloc: 1600, after wiredTiger: 1600, at end: 1600 }

можно понять что происходит по этому отрывку лога?

меняются только цифры, похоже на репликацию или восстановление из оплога

yopp
17.02.2018
22:35:20
Тормозит команда serverStatus, судя по всему

Праймари то выбрался?

Sergey
18.02.2018
07:40:19
Я на живой ноде из клатсера выбросил две дрвух ноды и он стал primary, потом поднял их и они тупили в логах в командой выше, ждать надело, утром эти ноды стали доступны и я их добавил обратно в кластер (ну и они подянлись со статусом OTHER до добавления) похоже на то что нужно все таки арбиторов добавить

Yura
18.02.2018
10:03:20
Хмм, кластер из трех нод? Я бы не стал больше одной ноды выбрасывать за раз. И это безотносительно MongoDB. Просто кворум должен быть всегда живым.

Alex
18.02.2018
10:10:16
Привет, нубский вопрос: как монга ведет себя в продакшине в качестве основного хранилища, на что стоит обратить особое внимание? Заранее спасибо

Google
Alex
18.02.2018
10:15:03
Или хотя бы подскажите куда писать менее технические вопросы по монге

Sergey
18.02.2018
10:19:07
Alex
18.02.2018
10:20:35
Хорошо ведёт. На метрики важные для вашего приложения. Менее технические — это какие?
Общие вроде того что скинул. Только начинаю знакомство, поэтому могу задавать глупые вопросы, которые здесь не приняты

yopp
18.02.2018
10:21:15
У нас тут всё принято

Alex
18.02.2018
10:23:58
Есть какие либо best practice при проектировании структур данных в монго?

yopp
18.02.2018
10:25:42
От кейса зависит. Но общий смысл: пишите так, ка будете читать.

Alex
18.02.2018
10:30:25
Есть такая штука как $ref, насколько я понял можно сослаться на документ в другой коллекции, что очень похоже на реляционку. Они быстрые, либо сразу отмести их в сторону?

yopp
18.02.2018
10:30:45
Это просто формат хранения ссылок

Их скорость будет равна скорости поиска по указанному в ссылке ключу в указанной в ссылке коллекции.

Alex
18.02.2018
10:36:05
В общем монга просто будет делать подзапросы, а это синтаксический сахар, и рассчитывать что оно это делает быстрее обычных запросов - не стоит?

yopp
18.02.2018
10:36:46
Она ничего не будет делать

Это будет делать драйвер, если он умеет автоматически разрешать ссылки

Может и не уметь, причём намеренно.

Alex
18.02.2018
10:40:45
То бишь чем больше нормализации тем медленней оно будет?

yopp
18.02.2018
10:43:25
Ну можно с натяжкой и так сказать

Как и с полной денормализацией

Но абстрактные проблемы имеют абстрактное решение. Какую задачу вы решить хотите?

Alex
18.02.2018
10:54:21
Пока я пытаюсь понять: подходит ли мне монга. Небольшой проект, можно сказать стартап. Предполагаю чтение из бд запросом по юзерам, и если мыслить в рамках реляционки, + нескольких зависимых таблиц. Плюс попутно раз в минуту/пол - 100+ записей в таблицу юзеров (апдейт).

Google
Alex
18.02.2018
10:55:06
Точнее апдейт 100 записей

И с потенциалом на увеличение количества апдейтов и их интенсивность

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

yopp
18.02.2018
11:11:01
Да

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

Max
18.02.2018
15:02:10
@dd_bb я опять тут со своими чанками :) подскажи, плиз, а как их проверять можно? суть в чем: я вроде сделал так, как вы сказали: - потушил балансер - удалил все TagRange , кроме местных. - сделал splitAt() - добавил addTagRange зону (точнее сразу все) - включил балансер оно чтото делает, изменилось кол-во чанков, но в config.chunks все равно лежат странные чанки. не добралось? не распилилось? как понять, что наступило счастье? или только выборку по коллекции, чтобы проверить, что там нет ненужных стран?

yopp
18.02.2018
15:03:29
Странные чанки в каком смысле странные?

Max
18.02.2018
15:06:30
В том, что там ip разбросаны mongos> db.chunks.find() { "_id" : "DBNAME.COLLNAME-country_\"ae\"ip_\"109.177.115.222\"", "ns" : "dev_0.COLLNAME", "min" : { "country" : "ae", "ip" : "109.177.115.222" }, "max" : { "country" : "ae", "ip" : "109.177.161.138" }, "shard" : "DSPRSv01", "lastmod" : Timestamp(1, 39), "lastmodEpoch" : ObjectId("5a86a96c8fb2d1890910fb94") }

я же так понимаю, что чанки после указания splitAt должны пересоздаться и быть непосредственно к стране привязаны (country)

yopp
18.02.2018
15:09:38
Нееет

Чанки не «слепляются» :)

Max
18.02.2018
15:10:25
тогда пошёл читать дальше

мне непонятно, как отследить состояние то есть вот splitAt вернул мне ок - и дальше что? :) где посмотреть, над чем думает балансер?

yopp
18.02.2018
15:11:06
Вы через splitAt порезали чанки по нужным вам для зонирования границам

splitAt только делит чанки

Балансировка и разделение чанков — разные механизмы

Устроить чтоли мастеркласс по шардингу

Max
18.02.2018
15:13:43
splitAt должен порезать существующие чанки на 2 части по той query, что я задал. то есть чанков должно стать больше блин, пойду дальше опыты ставить не хватает знаний, чтобы правильно вопрос задать спасибо!

Google
yopp
18.02.2018
15:15:10
Так как у вас были ренжи для балансировки которые требуют чтоб чанки не включали в себя больше одной страны, но такие чанки существовали — балансировщик скорее всего не мог удовлетворить условие

Сейчас по идее ситуация должна выправиться

Admin


Max
18.02.2018
15:15:40
Сейчас по идее ситуация должна выправиться
по идее - да вот как это проверить? я ж не могу посмотреть внутрь данных в чанке? или могу?

yopp
18.02.2018
15:15:43
И чанки по вашим правилам только со страной должны начать ехать туда, куда вам надо

Max
18.02.2018
15:16:03
как понять, завершился ли процесс разделения чанков? в db.currentOp() ничего интересного не заметил.

yopp
18.02.2018
15:16:19
Он сразу завершается

Когда splitAt возвращает ответ

Max
18.02.2018
15:17:34
тогда странно он вернулся практически моментально, хотя там 23кк документов на данный момент. хотяяя

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

yopp
18.02.2018
15:18:04
Это запись в db.chunks

Удалить один чанк и добавить два других это операция требующая миллесекунды

Когда вы делите чанк с вашим документами вообще ничего не происходит

Каждый шард это просто коллекция содержащая часть документов. Эта совершенным обычная коллекция

Max
18.02.2018
15:22:06
понял, спасибо а как тогда правильно посмотреть-проверить, чтобы внутри одного чанка не было различных стран? Получается, что надо изучить config.chunks, ну или sh.status(true) ? Вот чанк, к примеру: { "country" : "ae", "ip" : "86.96.73.99" } —» { "country" : "ae", "ip" : "86.97.11.106" } on : DSPRSv01 Timestamp(1, 142) я же правильно понимаю, что в данном чанке только одна страна?

Max
18.02.2018
15:23:26
Тогда, судя по всему, у меня, с вашей помощью, все получилось время откупоривать :)

yopp
18.02.2018
15:23:48
Продолжая: Единственная операция условно взаимодействующая с документам — балансировка

Google
yopp
18.02.2018
15:24:08
Балансировщик копирует документы из одной коллекция в другую

Max
18.02.2018
15:24:10
А может быть и нет { "country" : "es", "ip" : "999.999.999.999" } —» { "country" : "et", "ip" : "000.000.000.000" } on : DSPRSv01 Timestamp(1989, 173) { "country" : "et", "ip" : "000.000.000.000" } —» { "country" : "et", "ip" : "999.999.999.999" } on : DSPRSv01 Timestamp(1989, 174) { "country" : "et", "ip" : "999.999.999.999" } —» { "country" : "fi", "ip" : "000.000.000.000" } on : DSPRSv01 Timestamp(1989, 175)

Балансировщик копирует документы из одной коллекция в другую
он все документы же копирует, которые подпадают в чанк, так? то есть балансировщик оперирует чанком или все-таки документами поштучно?

Max
18.02.2018
15:32:06
Тогда не понимаю, откуда берутся чанки вида { "country" : "in", "ip" : "999.999.999.999" } —» { "country" : "io", "ip" : "000.000.000.000" } on : DSP-SG-shard01 Timestamp(1989, 263) попробую на тесте повторить.

Max
18.02.2018
15:37:13
sh.splitAt("DBNAME.COLLNAME", {country: 1, ip: 1})

yopp
18.02.2018
15:38:46
Так вам надо составить список стран и по каждой выполнить запрос, чтоб подлить по началу. Типа country: io, ip: MinKey

Я могу ошибаться, возможно надо по MaxKey делить, проверьте локально

(Есть mlaunch в mtools для быстрого разворачивания тестового стола для шардинга)

Max
18.02.2018
15:41:04
Ага, спасибо пойду почитаю, потому что... гдет пазлл в голове не досложился

А замена Зоны через removeTagRange + addTagRange должно заставить чанки переезжать? я тут взял для теста одну из зон и поменял ей зону с USA на ASIA, то есть ей в другой шард надо ехать. по зонам там явно есть куски без посторонних стран: { "country" : "za", "ip" : "000.000.000.000" } —» { "country" : "za", "ip" : "41.114.147.104" } on : DSPRSv01 Timestamp(1989, 612) { "country" : "za", "ip" : "41.114.147.104" } —» { "country" : "za", "ip" : "999.999.999.999" } on : DSPRSv01 Timestamp(1989, 613) { "country" : "za", "ip" : "999.999.999.999" } —» { "country" : "zm", "ip" : "000.000.000.000" } on : DSPRSv01 Timestamp(1989, 614) однако у них DSPRSv01 остаётся (это штаты). mongos> sh.getBalancerState() true

Страница 190 из 342