
Artem
01.07.2017
11:58:23
Проблема в том, что индекс нужен для двух языков

yopp
01.07.2017
12:26:06

Artem
01.07.2017
12:27:14
Я внимательно читал ссылки, но схемы очень разные

yopp
01.07.2017
12:31:48
Да, тебе надо поменять схему. А ты чего ещё ожидал?

Google

Timur
01.07.2017
12:36:08
С текстовым индексом "полнотекстовый" поиск не выйдет же.

yopp
01.07.2017
12:38:42
Полнотекстовый поиск != полнотекстовый индекс.
Если нужно искать по всему документу то это text и $**
Если нужен полнотекстовый индекс для конкретных атрибутов, то просто индекс. Но не размер поля ограничен 1024 байтами.
В любом случае схема <lang>.<field> не индексируется нормально.
Плюс это банально не эффективно (если вынести за скобки вопрос индексации, то я не понимаю почему не <field>.<lang>)
Банально как фильтровать по наличию поля?
Все языки в запросе указывать?

Dmitry
01.07.2017
12:46:44

Artem
01.07.2017
12:47:09
Фильтруем только под конкретный язык всегда

Dmitry
01.07.2017
12:47:21
у меня была похожая проблема, решили синхронизацией данных с ES, а там несколько разных индексов с разными настройками по одному и тому же полю
ну то есть там язык, case sensitive/insensitive + со спецсимволами индексы
монга мне показалась в этом совсем не сильна

Google

Artem
01.07.2017
12:48:57
Благодарю всех за советы, присмотрюсь к ES

Dmitry
01.07.2017
12:49:57
ES кстати тоже так себе, я так понял хранить там что-то не лучший выбор, мы поднимаем только для поиска и данные там просто дублируются. Но вроде самое простое решение

Timur
01.07.2017
12:58:37
А как вы данные синхронизируете монги с эластиком?

Алексей
03.07.2017
14:49:03
не любовь к парням из монги.
или системд не знаю уж кому адресовать нелюбловь.
монга 3,4,5 стартует раньше чем стартует сеть на хосте
в
[Unit]
After=network.target
есть. но этого мало.
так вот
# /etc/systemd/system/mongod.service.d/override.conf
[Unit]
After=network.target
Requires=network.target
стартует после сети

yopp
03.07.2017
14:59:25
сделай пуллреквест
ты где с этим столкнулся?

Dmitry
03.07.2017
18:12:10
всем привет. У меня есть две коллекции: папки и файлы. Я хочу чтобы отныне когда я запросил коллекцию папки, у них было свойство count, где отдавалось бы реальное текущее значение количества файлов (тобишь делается выборка из коллекции файлов, в которых идентификатор папки равен той папке). Как лучше сделать эту задачу? ЦЕль: получить список сущностей папок, которые бы показывали текущее количество "вложенных" в них файлов.
буду рад если поможете

Алексей
03.07.2017
18:29:42

yopp
03.07.2017
19:54:32
Свойство == кэш. За ним будет трудно следить.
Более того, мне кажется в gridfs этот вопрос уже освещён.


Dmitry
03.07.2017
19:57:54
вот я хочу что-то тут придумать
есть folders:
{
{
id: 1,
name: 'Folder 1'
},
{
id: 2,
name: 'Folder 2'
}
}
и есть коллекция files:
{
{
id: 1,
folderId: 1,
name: 'File1'
},
{
id: 2,
folderId: 1,
name: 'File 2'
},
{
id: 3,
folderId: 2,
name: 'File 3'
}
}
Нужно чтобы в результате при запросе я получил что-то типа:
{
{
id: 1,
name: 'Folder 1',
filesCount: 2
},
{
id: 2,
name: 'Folder 2',
filesCount: 1
}
}
немогу нагуглить хоть убей

Google

Dmitry
03.07.2017
20:05:24
буду рад если поможете

Bogus
03.07.2017
20:45:44
не уверен + говнокод
var result = [];
files.find((files) => {
folder.find((folders)=>{
folders.map((folder)=>{
files.forEach((file)=>{
let i = 0;
if(files.folderId == folders.id) {
i++;
};
});
result.push(new Object('id' : folder.id, 'name' : folder.name, 'filesCount' : i));
});
});
});

Enjoy the
03.07.2017
20:59:17
>не уверен + говнокод
Я так всю жизнь работаю

Bogus
03.07.2017
21:06:35
жиза)

yopp
04.07.2017
09:15:25
Основная ошибка — разделить файлы и директории в разные коллекции, тогда как сами сущности используются вместе.
Если объединить их в одну коллекцию, такой вопрос будет решаться агрегацией.
Хотя если уже объединять, то лучше уж materialized path использовать. Это известное решение, с которым всё понятно.

Dmitry
04.07.2017
10:02:50
А так можно добавить isFolder: true || false но...хз на сколько правильно

yopp
04.07.2017
10:03:50
Если ты не хочешь слышать совета, то ¯\_(ツ)_/¯

Dmitry
04.07.2017
10:04:07
yopp спасибо. Я подумаю, учту.

yopp
04.07.2017
10:04:17
Правильно писать в монгу так, как ты оттуда будешь читать.
Идеально свести всё к простым запросам без агрегаций.
За исключением тех редких кейсов где записи на порядки больше чем чтения.

Timur
04.07.2017
10:11:28
Столкнулся с проблемой: со временем растет CPU у процесса монги на праймари в реплика сете. С чем это может быть связано, куда копать? v3.4.5 wiredTiger

yopp
04.07.2017
10:11:58
Смотреть на остальные графики
Воткнуть https://github.com/y8/mongo_collection_exporter

Dmitry
04.07.2017
10:14:14

Google

Dmitry
04.07.2017
10:14:31
Придется всё-таки переезжать в одну коллекцию
Погуглю конечно еще
Спасибо

Timur
04.07.2017
10:31:02
Блин, индексы забыл добавить на одну коллекцию. Данные растут, а там фулл скан гоняет. Помогло посмотреть на другие графики)

yopp
04.07.2017
11:00:28

Алексей
04.07.2017
14:34:36
@dd_bb
mon_1 | D, [2017-07-04T14:33:10.089868 #6] DEBUG -- : MONGODB | ххх:27017 | admin.listDatabases | STARTED | {"listDatabases"=>1}
и висит. чо хочет ?
ох
| local.find | SUCCEEDED | 273.809597s

yopp
04.07.2017
14:36:18
:)
Ответ на запрос хочет!
База перегружена?
Или сеть?

Алексей
04.07.2017
14:39:06
оба нет
mongo_scrape_duration_ms 294703
ох
ага второй и последующие запросы уже лучше

yopp
04.07.2017
14:40:34
ааа
это экспортер
интересно

Алексей
04.07.2017
14:41:15
mongo_scrape_duration_ms 15380

yopp
04.07.2017
14:41:27
а там много коллекций?

Google

Алексей
04.07.2017
14:41:45
182тысячи метрик....
с этим наверное чтото надо делать

yopp
04.07.2017
14:42:14
182 тысячи коллекций?
или ты про какие метрики?
если ты про метрики экспортера, то это нормально. поставь раз в минуту скрейп
даже раза в пять минут в среднем хватает

Алексей
04.07.2017
14:43:52
метрик именно
раз в минуту... ок

yopp
04.07.2017
14:44:14
если оно чаще, если реже — то не трогай

Алексей
04.07.2017
14:44:29
я когда думал ща "поподробнее" на монгу позырю не ожидал что будет настолько поподробнее

yopp
04.07.2017
14:44:37
:))))