Физик-ядерщик
Хелоу друзья
Физик-ядерщик
Ускоряет ли поиск более детально описанный поисковый запрос, в котором указано несколько полей вместо одного?
Aleksey
Физик-ядерщик
Андрей
Кто-то может подсказать, почему не работает лдап авторизация?
"ctx":"conn19","msg":"Authentication failed","attr":{"mechanism":"PLAIN","principalName":"","authenti
cationDatabase":"$external","client":"127.0.0.1:50508","result":"OperationFailed: SASL step did not complete: (no mechanism available)"}}
На хосте с саслом порядок, авторизация на лдапе консольно происходит. В конфиге СУБД есть setParameter:
saslauthdPath: /var/run/saslauthd/mux
authenticationMechanisms: PLAIN,SCRAM-SHA-1,SCRAM-SHA-256
Denis
Viktar
Denis
Так и делаем. У нас апдейты. Ничего не удаляем
На таймсериес бд переезжать уже поздно я так понял? )
Клик например. Он норм жмет. Но если вы храните что то типа логов, транзакций (только инсерты). Говоришь апдейты, смотря какие, мб и таймсериес тоже не то
Viktar
Да. И стоимость переезда довольно большая получится
yopp
yopp
Если документы небольшие, то разница не существенная из-за компрессии
yopp
Похоже на правду, да
yopp
Особенно если вы zstd используете
Viktar
Именно его и использую
yopp
У snappy результат может быть лучше
yopp
В смысле что короткие поля будут давать больше выигрыша
Viktar
Я понял. Но проиграю на компрессии
yopp
Да
yopp
В зависимости от содержимого документа, можно попробовать какие-то хитрости
yopp
Например собирать документы в бакеты
yopp
Так чтоб минимизировать дублирующиеся поля
yopp
Если есть какие-то поля с низкой энтропией — нормализовать их
Viktar
У меня приоритет по скорости чтения. Документы в 98% случаев достаются по ид. Поэтому делали макс денормализовано
yopp
Не видя примеров документов и статистики по полям, сложно что-то предложить :)
yopp
yopp
Но учитывая что основное бутылочное горлышко это любое IO, даже поход в кеш это долго, не говоря уже о памяти, то я даже не знаю есть ли смысл на CPU cost обращать внимание
Viktar
zstd дало нам перформанс по ИО на 27%, по СПЮ прирост был в 44%. Для нас это увеличило скорость приложения на 31%
yopp
Viktar
Дьявол в деталях :)
Детали в том, что тупо много документов и они довольно большие. ~100кб
Viktar
И второй момент, что читаем и пишем на один диск.
yopp
И переносом части данных в клиента
Viktar
И у нас ещё тупо идёт bulk updateOne.
yopp
Я так понимаю что борьба идёт не за запись, а за чтение
Viktar
В проде за чтение, в стейджинге за запись.
Viktar
Процессим в общем случае 450-500 млн документов.
Viktar
Сейчас сделали для процессинга 20 нод для чтения.
Denis
Тогда поможет только переписать бэк на го. Если уже на го то на раст
Denis
🐺
db.zips.update({city:"HUDSON"},{$set:{"pop":pop+5}})
🐺
подскажите как мне обновить значение pop + 5
🐺
как взять старое значение и прибавить ?
Roman Khonichev
$inc
Viktar
подскажите, можно ли ускорить агрегацию
"command": {
"aggregate": "addressCatalog",
"pipeline": [
{
"$geoNear": {
"near": {
"type": "Point",
"coordinates": [
-81.214015,
33.984846
]
},
"distanceField": "dist.calculated",
"maxDistance": 200,
"query": {},
"includeLocs": "dist.location",
"spherical": true
}
},
{
"$limit": 5
}
],
"cursor": {},
"lsid": {
"id": {
"$uuid": "7b630c0b-5ec0-4adb-962a-96fcb23eedf2"
}
},
"$db": "catalog",
"$readPreference": {
"mode": "primaryPreferred"
}
},
смысл найти ближлежащие обекты
размер коллекции 111 млн записей
"storage": {
"data": {
"bytesRead": 2351827895,
"timeReadingMicros": 25295139
}
yopp
подскажите, можно ли ускорить агрегацию
"command": {
"aggregate": "addressCatalog",
"pipeline": [
{
"$geoNear": {
"near": {
"type": "Point",
"coordinates": [
-81.214015,
33.984846
]
},
"distanceField": "dist.calculated",
"maxDistance": 200,
"query": {},
"includeLocs": "dist.location",
"spherical": true
}
},
{
"$limit": 5
}
],
"cursor": {},
"lsid": {
"id": {
"$uuid": "7b630c0b-5ec0-4adb-962a-96fcb23eedf2"
}
},
"$db": "catalog",
"$readPreference": {
"mode": "primaryPreferred"
}
},
смысл найти ближлежащие обекты
размер коллекции 111 млн записей
"storage": {
"data": {
"bytesRead": 2351827895,
"timeReadingMicros": 25295139
}
а что в executionStats?
Viktar
𝚂𝚑𝚞𝚔𝚑𝚊
как популяризировать(populate) при получении, сохранении и возвращении документа и тд
𝚂𝚑𝚞𝚔𝚑𝚊
сейчас у меня просто повторяющийся код
Post.post(“save”, function () {...})
и вот так 3 раза и меняется только значение “save”
𝚂𝚑𝚞𝚔𝚑𝚊
можно это как-то сократить?
Sergey Bedritsky
господа, нужна оплачиваемая помощь с несколькими муторными аггрегациями. куда обратится?
Sergey Bedritsky
может у кого-то есть час-два времени?
Антон
у меня с фронта приходит объект json с фильтром для монги. и если в фильтре не только строка или число, а еще ObjectID, то проблема - json преобразует ее в строку... есть какие то адекватные варианты передачи id в json? чтобы на бэке не парсить этот json
Bogdan
Всем привет!
Ребят подскажите пожалуйста как через Sequilize сделать запрос такого вида?
SELECT * FROM users WHERE date_1 >= (date_2 + '2 day') OR date_1 is null;
Делаю вот так, но ерроры кидает
await Users.findAll({
where: {
activated_at: { [Op.lte]: lastActivatedAt },
date_2: {
[Op.or]: {
[Op.gte]: sequilize.col('date_1') + '2 days' ,
[Op.eq]: null,
},
},
Максим
Антон
Антон
ну как не получится? там есть тип строка и число. это поля нормально ищутся. а вот когда objectid, то он конвертится в строку и монго об этом не знает конечно
Максим
Sergey Bedritsky
на одном из шагов аггрегации у меня получсается такой объект. как теперь его сгруппировать по дате и (!) суммировать все совпадения по "commands.v" при этом названия этого поля должно быть динамическим (заранее не известно)? т.е. в итоге должно быть { date: '2020-01-01', dev: 37377, build: 398493, generate: 398479 } (dev, build, generate и тд это названия которые нужно вытащить в аггрегации)
Sergey Bedritsky
при этом таких документов миллионы. это плохая идея?
Viktar
Сделал индекс на коллекции
{
"v" : 2,
"key" : {
"cityId" : 1,
"loc_mdb" : "2dsphere"
},
"name" : "cityId_1_loc_mdb_2dsphere",
"background" : true,
"2dsphereIndexVersion" : 3
}
но он почему то не работает с моей агрегацией
db.addressCatalog.aggregate([
{
$geoNear: {
near: { type: "Point", coordinates: [-149.914791, 61.133738 ] },
distanceField: "dist.calculated",
maxDistance: 2,
query: { cityId: xxxxxxxx },
includeLocs: "dist.location",
spherical: true
}
}
])
Получаю вот такую ошибку
{'ok': 0.0, 'errmsg': 'error processing query: ns=catalog.addressCatalogTree: GEONEAR field=loc_mdb maxdist=200 isNearSphere=1\nSort: {}\nProj: {}\nCollation: { locale: "simple" }\n planner returned error :: caused by :: unable to find index for $geoNear query', 'code': 291, 'codeName': 'NoQueryExecutionPlans'}
Viktar
"loc_mdb" : [
-149.914791,
61.133738
]
Вот по этому полю сделан гео индекс
yopp
Сделал индекс на коллекции
{
"v" : 2,
"key" : {
"cityId" : 1,
"loc_mdb" : "2dsphere"
},
"name" : "cityId_1_loc_mdb_2dsphere",
"background" : true,
"2dsphereIndexVersion" : 3
}
но он почему то не работает с моей агрегацией
db.addressCatalog.aggregate([
{
$geoNear: {
near: { type: "Point", coordinates: [-149.914791, 61.133738 ] },
distanceField: "dist.calculated",
maxDistance: 2,
query: { cityId: xxxxxxxx },
includeLocs: "dist.location",
spherical: true
}
}
])
Получаю вот такую ошибку
{'ok': 0.0, 'errmsg': 'error processing query: ns=catalog.addressCatalogTree: GEONEAR field=loc_mdb maxdist=200 isNearSphere=1\nSort: {}\nProj: {}\nCollation: { locale: "simple" }\n planner returned error :: caused by :: unable to find index for $geoNear query', 'code': 291, 'codeName': 'NoQueryExecutionPlans'}
В geoNear нет условия по полю с координатами
Viktar
а можно пример, не совсем вас понял? я брал за основу
https://docs.mongodb.com/manual/reference/operator/aggregation/geoNear/
Viktar
db.places.aggregate([
{
$geoNear: {
near: { type: "Point", coordinates: [ -73.99279 , 40.719296 ] },
distanceField: "dist.calculated",
maxDistance: 2,
query: { category: "Parks" },
includeLocs: "dist.location",
spherical: true
}
}
])
yopp
yopp
Вероятно вам нужно указать key: loc_mdb
Viktar
так тоже пробывал, та же ошибка
Viktar
но самое интересное, что с не с композитным индексом работает
Viktar
у меня до этого был простой геоиндекс, и с ним запрос отрабатывал, просто он довольно медленный, решил отсекать по городу ещё но что то не получилось
yopp
А индекс точно создался уже?
Viktar
как проверить наверняка?
Viktar
> db.addressCatalog.createIndex({ cityId:1, loc_mdb : "2dsphere" }, {background:true})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 3,
"numIndexesAfter" : 4,
"ok" : 1
}
Viktar
теоритически создался