yopp
но не обязательно
yopp
first и last не надо
Roman
incremental page index?
yopp
если больше 2 участников, то да
Roman
{
members: [<user_id>]
pageIndex: <integer>
messages: [
{
datetime: <datetime>
message: <text>
author: <user_id>
}
]
}
Roman
хмм, а что если например нужен поиск по времени (найди все сообщения с 1 июля 2016 по 3 июля 2016)
yopp
Roman
тогда нужны поля first и last для индексации
yopp
yopp
{ "messages.datetime" => { $gte: ..., $lt: ...} }
yopp
но надо понимать что тебе вернут не «поддокументы» а документы
Roman
хмм, окей, значит таким образом
Roman
ну да
yopp
т.е. если из 20 сообщений там в нужную дату попадает одно, вернут тебе индекс всего документа
yopp
тьфу
yopp
тело
Roman
ну да)
Roman
всё верно
Roman
норм
Roman
хмм, а разве нельзя просто получить список индексов документов?
Roman
дабы всё в память не грузить а постепенно, поочерёдно
Roman
1. find between 01.07.2016-00:00 по 03.07.2016-00:00 = docs [doc1_id, doc2_id, ...]
2. for doc in docs retrieve document
yopp
Roman
ну чтоб не грузить все 100500 документов одним махом при выборе довольно большого временного периода..
Roman
а получить лишь Id документов и качать поочерёдно уже body
yopp
не надо пытаться перехетрить планировщик
yopp
ты делая запрос открываешь «курсор»
yopp
курсор составляет с помощью планировщика, тадам, план запроса, пытаясь угадать что имел ввиду автор запроса.
yopp
дальше курсор набирает нужное количество документов (по-умолчанию сколько влезет в один 16 мегабайтный bson, потому что монговский протокол тоже на bson построен)
yopp
и возвращает в виде результата
yopp
за исключением сложных случаев с сортировками, тогда всё хуже
yopp
условно, если ты делаешь выборку без сортировки, с условием которое полностью зарешается с помощью индекса, то курсор составляет себе список _id документов и выбирает их не все, а в по мере «истощения»
Roman
ок, всё понял, значит всё-таки буду в монгу пихать page'ы чата дабы SQL не нагружать
yopp
сделай сначала прототип, чтоб схему понять
yopp
с просто pageIndex будет сложно вставлять поддокументы
Roman
Roman
зачем pageIndex в поддокументах?
Roman
хотя наверное лучше так:
chatrooms:
{
id: <object_id>
members: [<user_id>]
}
messages:
{
room: <object_id>
pageIndex: <integer>
messages: [
{
datetime: <datetime>
message: <text>
author: <user_id>
}
]
}
Roman
но там опять возникает вопрос по atomicity... что если нужно удалить чатрум, а во время удаления 10 документов удалились лишь 3 и сервер рухнул... 7 документов остаются в бд хотя система про чатрум забывает 😕
в результате uncollected garbage
Sergey
Он не мешает консистентности базы. Ну и можно в бекграунде чистить
Sergey
Ну или сначала чатрум скрывать, а удалять только после удаления всех документов
yopp
Зачем удалять?
yopp
Флаг поставил в чятруме. А сообщения роботам скормил. Они за это могут всякой смешной бигдаты наварить
yopp
Не понимаю зачем в 2017 году данные удалять.
yopp
Roman
ну хотя если флаг ставить именно в chatroom документе тогда да
Roman
типа archived: bool
yopp
Именно
Sergey
Вот, кстати, @dd_bb дело говорит. Зачем удалять вообще?
Roman
тогда операция атомарна
Roman
согласен, да, оставляешь page'ы, атомарно ставишь флаг archived и готово
Roman
отлично, ну вроде как всё встало на свои места, спасибо!
Anonymous
привет всем. резко перестала работать и монга и млаб. в чем прикол?
Anonymous
убунта, сервер на ноде
Anonymous
тупо все запросы по роутам где обращения в базе улетают в pending
Anonymous
ничего не обновлялось. систему перегружал. старый рабочий 100% проект пробую - та же срань
Anonymous
я в шоке
Anonymous
сука. заработала. НИХЕРА НЕ ДЕЛАЛ
Anonymous
это пиздец какой-то, ебанное гавно монга
Anonymous
кто-то пробовал RethinkDB?
Anonymous
😂
tenni
Sergey
Ребят, а то, что в db. printSlaveReplicationInfo() и в rs.status() периодически проскакивают отрицательные числа - это норма или стоит беспокоиться? NTP есть.
tenni
у меня тоже бывает, единица обычно, ничего такого
yopp
yopp
NTP — eventually consistent, так что есть шанс что в единицу времени у тебя дрифт между нодами ненулевой
Sergey
Но не в секунду же или даже больше
yopp
В секунду и даже больше ;)
yopp
Каждая из нод отстаёт от источника точного времени на 500мс, но с разным знаком. Дельта между нодами уже секунда
Viktor
Дрифт в секунду и больше разве норма? Особенно если стоит свой ntp сервер ( а то и два) в своей подсети с нодами
yopp
Ох
yopp
Всем CAP теорему в этом чяте.
Viktor
Прочитана
yopp
Толку то
yopp
Нарисуй себе две распределенные связанные системы: одна синхронизации точного времени между нодами, а другая синхронизации журнала операций, которые основаны на локальном времени каждой ноды
Viktor
Стоп, разве ntp клиент не меняет локального времени машины?