Oleg
ну есть поле user: {type: String, requered: True}. что я ещё могу вписать в объект?
Nick
все что вашей фантазии будет угодно под ваши безнесс тербования
Oleg
в смысле?
Oleg
есть же определённые ключи.
Nick
нету
Nick
поля вы сами определяете
Oleg
а requered, type, enum?
Nick
или вы про то какие опции можно указать7
Oleg
да
Nick
ну так откройте доку по монгусу
Nick
там куча всего
Oleg
спасибо
Nick
и туда же https://mongoosejs.com/docs/schematypes.html
Bandikoot
джентльмены, а насколько может быть больно переименовать shard в работающем нагруженном кластере из percona mongodb 3.4?
SvPupok
Дима, а зачем его переименовывать?
Bandikoot
темплейты в графане под pmm не очень удобно смотреть, когда есть в разных кластерах одинаковые тэги шардов
yopp
yopp
Все что можно сделать штатными средствами это rolling migration. Добавить новый шард с новым имеем, мигрировать туда все чанки и потом вывести шард со старым именем из кластера
Bandikoot
yopp
Есть ещё вариант химичить с названием шардов в config базе, но это в продакшене абсолютно безумная идея
yopp
Возможно в pmm есть штатный способ поправить конфигурацию Прометея, чтоб сделать re-label
Alexey
Всем добрый день! Нужна помощь знающих людей, вопрос про индексы, допустим, у меня есть записи в коллекции, у записи три поля, сортирую я часто по каждому из них или по всем или по любым двум, в общем любые варианты сортировки по этим трем полям, как мне лучше всего задать индексы, в одном прописать сразу три поля, или описывать отдельно каждый индекс с каждым полем, или еще добавить индексы с двумя полями, но тогда на одну подобную коллекцию придется задавать 7 индексов, вряд ли это делается так, и вообще по какому принципу монга выбирает индекс из существующих, если индексов создано несколько? Заранее благодарю за ответ!
Nick
Всем добрый день! Нужна помощь знающих людей, вопрос про индексы, допустим, у меня есть записи в коллекции, у записи три поля, сортирую я часто по каждому из них или по всем или по любым двум, в общем любые варианты сортировки по этим трем полям, как мне лучше всего задать индексы, в одном прописать сразу три поля, или описывать отдельно каждый индекс с каждым полем, или еще добавить индексы с двумя полями, но тогда на одну подобную коллекцию придется задавать 7 индексов, вряд ли это делается так, и вообще по какому принципу монга выбирает индекс из существующих, если индексов создано несколько? Заранее благодарю за ответ!
если сортируете - то только все 7 создавать
Nick
для простых выборок можно было бы созда по индексу на поле и монга вроде как бы использовала их вместе, но это не всегда срабаоытвает
Alexey
благодарю за ответ, а если например запрос такой,
{
name: «name»,
age: «age»,
createdAt: {
$and: [{
$gte: «2018-11-24T12:52:59.000+0000»
}, {
$lte: «2018-11-25T12:52:59.000+0000»
}]
}
},
какие индексы надо создать для оптимального выполнения
отдельно name, отдельно age, отдельно createdAt? или можно их все вместе в один?
Nick
Alexey
понял, спасибо Вам большое!
Nick
yopp
Compound index и несколько индексов по каждому из полей совершенно по разному работают.
Если вы создаётся compound index, то его проще всего представить как «матрешки». Каждое уникальное значение в верхнем, самом левом поле, будет матрешкой. внутри каждой матрёшки будут ещё матрешки, по одной на каждое уникальное значение и так далее.
Как следствие, вы можете использовать индекс или целиком или используя поля слева на право.
Например, индекс {name: 1, age: 1, createdAt: 1} будет использовать для разпросов по
1) name
2) name и age
3) name и age и createdAt
Просто по age и по createdAt или по name и createdAt индекс будет невозможно использовать.
yopp
Тоже самое касается сортировки. По name она будет работать, а по просто age или createdAt нет
yopp
Основное приемущество compound индексов размер и скорость выборки (если указаны все поля).
Когда полей много и они использутся независимо, смысла в нём очень мало
Nick
yopp
нет
Nick
"indexBounds" : {
"name" : [
"[\"asda\", \"asda\"]"
],
"age" : [
"[MinKey, MaxKey]"
],
"cratedAt" : [
"(new Date(1514841680000), new Date(1514841681000))"
]
}
yopp
"age" : [
"[MinKey, MaxKey]"
],
Nick
спецом даже проверил прежде чем написать
yopp
:trollface:
Nick
"stage" : "IXSCAN",
Nick
не?
yopp
"[MinKey, MaxKey]"
yopp
так-то можно и по createdAt выборку делать
Nick
так вопрос в том что будет использован индекс, а не колскан
yopp
name: [MinKey, MaxKey], age: [MinKey, MaxKey]
Nick
а вот по createdAt выборки не будет
yopp
yopp
вот так можно сделать выборку черех индекс
Nick
точнее плнировщик этого не делает
yopp
про добавление [min,max] это видать новая история
yopp
раньше так не работало и правильно делало
Nick
3.4
yopp
yopp
ну в итоге монга будет сканировать почти весь индекс :)
yopp
так что это не сильно лучше чем collscan
Nick
хотя это может поменяться забей я в базу лям доков, может планировщик по другому будет решать
yopp
возможно, да
Nick
это один док и индекс
yopp
но в любом случае, чтоб найти createdAt монга будет перебирать _все_ ключи age внутри заданного name
Nick
в этом плане да, выбор конкретного инедекса надо делать относительно данных, что сильнее сужает выборки
Nick
чекнул
name: {
$gt:MinKey,
$lt: MaxKey
},
age: {
$gt:MinKey,
$lt: MaxKey
},
cratedAt: {
$gt:ISODate("2018-01-01 21:21:20Z"),
$lt: ISODate("2018-01-01 21:21:21Z")
}
yopp
Нужно выбрать те индексы, которые позволяют быстрее и дешевле всего получить данные :)
Nick
использует индекс, если name убрать, то уже нет
yopp
в name сделай условие $gte: MinKey, $lte: MaxKey
Nick
я его совсем убрал)
Nick
так то понятно что если он присутсвует в запросе то индекс будет использован
yopp
$gte: MinKey, $lte: MaxKey это не присутсвует в запросе
yopp
это звёздочка
Nick
Nick
может както не совсем ясно описал
Nick
короч все работает как и ожидается
yopp
и теперь если у нас 1 млрд документов, то запрос будет требовать сканирования 1 млрд ключей
Nick
зато индекс в планировщике используется))))
yopp
ну вот с age: MinKey, MaxKey тоже самое
yopp
есил у нас например 500 имён, то надо будет просмотреть 2 млн ключей
yopp
лучше конечно чем миллиард, но всё равно
Nick
погоди
Nick
т.е. ты хочешь сказать, что монга проигнорит индекс и если выборка по дню сужает из лярда до 1к доков, то монга всеравно полезет читать лярд?
Nick
если я явно укажу мин/макс для имени и возсраста, и укажу диапазон времени
yopp
не документов, а ключей индекса
Nick
а