yopp
И даётся это ценой latency
Alexey
yopp
Сколько у вас сейчас данных?
yopp
Какой характер чтения предполагается?
Alexey
Чтение из GridFS
Alexey
То есть загрузка файла массивом байт
yopp
1тб это то что у вас сейчас на руках или проекция роста? Какой объём чтения вы ожидаете?
Alexey
Не знаю, я недавно в этой компании. 1 Тб - это сейчас
Alexey
Я думаю, рост будет около 100 Мб/год
yopp
Где это сейчас хранится? Почему только два хоста?
Alexey
Пардон. 100 Гб/год
Alexey
Хоста два потому что не знаю почему)
В критичном случае я могу запросить еще один хост, который в работе, чтобы ему отдать роль аобитра, но не хотелось бы туда лезть - работает на пределах возможностей
yopp
Арбитру не нужны ресурсы. Он не хранит данные и его задача только добавить голос в кластер . Если вы не планируете читать с secondary, в этом случае вы можете обойтись двумя нодами с данными и одним арбитром. Если вы планируете читать с secondary, в этом случае вам без третего хоста не обойтись
Alexey
Я понял. Тогда подскажите пожалуйста вот что. Я создаю узел реплики на одной машине на стандартном порту, на второй машине создаю узел на 27018. Инициирую реплику на первой машине (по стандартному порту), пытаюсь добавить в нее узел по внешнему адресу+порту. Система говорит, что так нельзя: либо все локалхосты, либо все !локалхосты. Ок, иду на вторую машину, меняю хост узла на адрес+27018. Брандмауэр настроен на обеих машинах если что. Но чтобы изменить имя хоста узла, мне нужно инициировать реплику, что наверно(?) неправильно. Кроме того, после переименования обоих узлов, add все равно не происходит, так как второй узел не отвечает. Что я делаю не так?
Ilya
что rs.printSlaveReplicationInfo() выведет?
Ilya
я правильно понял, что есть узел, который ненужен?
Alexey
Ilya
да
Alexey
На каком узле выполнять?
Ilya
на праймари
Ilya
должен вывестить список всех секондари узлов
Alexey
Пусто, ведь я не смог добавить секондари - он не ответил
Ilya
а т.е. есть только праймари
Alexey
Ilya
Ilya
db.isMaster() - это конфиг покажет, там есть узлы?
Alexey
Ilya
я rs.initiate не делаю, просто добавляю нового члена реплики rs.add...
Ilya
https://docs.mongodb.com/manual/reference/method/rs.add/
Ilya
либо удаляю rs.remove
Alexey
Но разве это сработает, если state=notYetInitiated?
Ilya
это в конфиге прописано? mongo.conf ?
Alexey
Что именно?
Ilya
я полистал историю, есть монга с террабайтом данных, у вас есть задача сделать из этого кластер?
Ilya
может есть смыла написать новый конфиг, протестировать с сторонке, там не много деректив. То что относится в репликации буквально две строчки
Ilya
replication:
replSetName: "ИМЯ_РЕПЛИКИ"
Ilya
точно так же на других нодах.
Ilya
потом rs.add с праймари, он схудит туда и настем копировать все данные
Ilya
конфиг на сервере, там ручками что-то можно прописать, то что в шелле это генерится. Чтобы вносить изменения в шеле используется cfg = rs.conf()
есть отдельный ман по этому
Ilya
https://docs.mongodb.com/manual/tutorial/change-hostnames-in-a-replica-set/
Ilya
но лучше не делать сразу на проде, сделать тестовый стенд
Alexey
Да, я уже умею это делать. Но, опять же, если не сделать rs.initiate(), rs.conf() возвращает почти пустую строку
Ilya
похоже процесс инициализации запущен, но еще не готов
Ilya
я бы лог на секондари посмотрел, что там сейчас вторится и можно зайти на этот сервер, там должен быть какой-нибудь статус:
https://docs.mongodb.com/manual/reference/replica-states/
Andrew
Alexey
Ребята, всем спасибо за помощь. Я разобрался. Просто при поднятии узла указал bind_ip и узел ответил! Арбитра всё-таки добавлю из уже работающих машин
ᴅⁱᵐⁱᴅʳ0ˡ
В хосты пропиши новые имена
Alexey
Скажите, а вот я поднял узлы, командную строку можно закрыть? Или её работа=работа узла?
VladIsLaugh
не могу никак законектится к серверу. Пробовал и через терминал и через robomongo и не получаеться. Не подскажите в чем может быть проблема?
ᴅⁱᵐⁱᴅʳ0ˡ
Логи сервера смотри
Пр. Вова
Люди, а подскажите на каком серваке можно еще разместить сервер для монго, а то на Млабе не получается зарегаться? (Вопрос наверное относится к бесплатным вариантам)
Dmitriy
возьмите атлас, бесплатный вариант с 500Мб диска
Max
привет! а что шустрее под индексам работает в плане скорости поиска - строка или object id ?
Dmitriy
Агрегировал коллекцию. В результате вышел массив документов
[
{
_id: 'unique1',
name: 'A',
},
{
_id: 'unique2',
name: 'A',
},
{
_id: 'unique3',
name: 'B',
},
]
Как, сделать так чтоб вернулся массив, но уже документы с name : 'A' схлопнулись в один и получить результат:
[
{
name: 'A',
},
{
name: 'B',
},
]
yopp
yopp
Агрегировал коллекцию. В результате вышел массив документов
[
{
_id: 'unique1',
name: 'A',
},
{
_id: 'unique2',
name: 'A',
},
{
_id: 'unique3',
name: 'B',
},
]
Как, сделать так чтоб вернулся массив, но уже документы с name : 'A' схлопнулись в один и получить результат:
[
{
name: 'A',
},
{
name: 'B',
},
]
https://docs.mongodb.com/manual/reference/operator/aggregation/group
Tommy
/?4 ч
yopp
https://docs.mongodb.com/manual/tutorial/query-for-null-fields/
yopp
TL;DR $type: 10 или просто null (или тип в вашем языке который кастится в bson null)
yopp
Too long; didn't read (https://en.m.wikipedia.org/wiki/Wikipedia:Too_long;_didn%27t_read)
Сейчас часто используется как аббревиатура для «если коротко»
yopp
А, пропустил часть с ключами.
Проще всего поменять схему на массив: senders: [{name: “foo”, bar: null}]
yopp
В обратном случае вам придётся использовать Aggregation Framework, где вы будете сначала трансформировать документ senders в массив, потом по нему фильтровать результаты, а потом уже выводить название ключа.
yopp
https://docs.mongodb.com/manual/reference/operator/aggregation/objectToArray/
Daniil
что будет если заменить строку 'Fields' на 'Field'?
Евгений
Коллеги, приветствую.
В FAQ по MongoDB Storage для WiredTiger сказано о переиспользовании места после удаления документов в коллекции:
https://docs.mongodb.com/manual/faq/storage/#how-do-i-reclaim-disk-space-in-wiredtiger
Поясните, пожалуйста. Для каких коллекций после db.collection.remove() может быть переиспользовано зарезервированное место? Только для той, по которой был произведен remove() или для всех коллекций в database?
Alexey
Коллеги, добрый день! Объясните одну вещь пожалуйста. Есть реплика из трех узов на трех машинах. Допустим у нас кончилось место на праймари узле. Данные при записи автоматически уйдут на секондари узел?
yopp
Alexey
Начальство затыкало уже просто, а я третий день с монгой знаком)
yopp
yopp
Как следствие выборы и новый праймари
yopp
Но проблема заключается в том, что вероятнее всего на других нодах место тоже закончится.
Alexey
Понятно. Да, ибо часто носители одной емкости. Как тогда происходит перенос папки хранения для узла?
yopp
yopp
Вывели одну ноду, заменили хранилище на более емкое, вернули назад, дождались завершения синхронизации с праймари. Или как вариант скопировали dbPath на новое хранилище, вернули и дождались когда реплика догонит кластер. Повторяете с каждой новой