@MongoDBRussian

Страница 113 из 342
Roman
02.08.2017
16:17:30
ибо я знаю что документ макс. 4мб весит

yopp
02.08.2017
16:17:53
ты где-то не в том месте информацию берёшь

монга это фронтенд к хранилищу bson документов

в монге лимит на размер bson — 16 мб

Google
Roman
02.08.2017
16:20:17
хмм, окей

yopp
02.08.2017
16:20:21
что там внутри этого bson — совершенно пофиг, главное чтоб было поле _id, значение которого меньше 1024 байт

т.е. если это другая bson структура, то опять-же, сериализированная в bson она должна быть меньше 1024 байт

к этим документам есть несколько разновидностей индексов

для того чтоб искать по _значениям_ аттрибутов внутри документа

Roman
02.08.2017
16:21:48
угу, это понятно

хмм, т.е. просто хранить чанки чата в документах с определённым размером?

yopp
02.08.2017
16:23:05
я не устану повторять простую вещь: документы надо хранить так, как ты их будешь читать

понятно что должны быть разумные ограничения

зачем вытаскивать все 16 мегабайт ради 15 байт?

Roman
02.08.2017
16:24:06
типа { members: [<user_id>] first: <datetime> last: <datetime> messages: [ { message: <text> author: <user_id> } ] }

max 50 message per document, or "page"

yopp
02.08.2017
16:26:38
messages: [{t: DateTime, from: Boolean, text: String}]

Google
yopp
02.08.2017
16:26:50
хотя если надо по автору искать, то да, дублировать

но не обязательно

first и last не надо

Roman
02.08.2017
16:27:48
incremental page index?

yopp
02.08.2017
16:27:51
если больше 2 участников, то да

Roman
02.08.2017
16:29:01
{ members: [<user_id>] pageIndex: <integer> messages: [ { datetime: <datetime> message: <text> author: <user_id> } ] }

хмм, а что если например нужен поиск по времени (найди все сообщения с 1 июля 2016 по 3 июля 2016)

Roman
02.08.2017
16:30:36
тогда нужны поля first и last для индексации

Roman
02.08.2017
16:31:20
messages.datetime
хмм... а как выглядит такой query?!

yopp
02.08.2017
16:32:06
{ "messages.datetime" => { $gte: ..., $lt: ...} }

но надо понимать что тебе вернут не «поддокументы» а документы

Roman
02.08.2017
16:32:31
хмм, окей, значит таким образом

ну да

yopp
02.08.2017
16:32:51
т.е. если из 20 сообщений там в нужную дату попадает одно, вернут тебе индекс всего документа

тьфу

тело

Roman
02.08.2017
16:33:11
ну да)

всё верно

Google
Roman
02.08.2017
16:33:13
норм

хмм, а разве нельзя просто получить список индексов документов?

дабы всё в память не грузить а постепенно, поочерёдно

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

Roman
02.08.2017
16:36:28
ну чтоб не грузить все 100500 документов одним махом при выборе довольно большого временного периода..

а получить лишь Id документов и качать поочерёдно уже body

yopp
02.08.2017
16:37:25
не надо пытаться перехетрить планировщик

ты делая запрос открываешь «курсор»

курсор составляет с помощью планировщика, тадам, план запроса, пытаясь угадать что имел ввиду автор запроса.

дальше курсор набирает нужное количество документов (по-умолчанию сколько влезет в один 16 мегабайтный bson, потому что монговский протокол тоже на bson построен)

и возвращает в виде результата

за исключением сложных случаев с сортировками, тогда всё хуже

условно, если ты делаешь выборку без сортировки, с условием которое полностью зарешается с помощью индекса, то курсор составляет себе список _id документов и выбирает их не все, а в по мере «истощения»

Roman
02.08.2017
16:41:16
ок, всё понял, значит всё-таки буду в монгу пихать page'ы чата дабы SQL не нагружать

yopp
02.08.2017
16:41:31
сделай сначала прототип, чтоб схему понять

с просто pageIndex будет сложно вставлять поддокументы

Roman
02.08.2017
16:43:30
зачем pageIndex в поддокументах?

хотя наверное лучше так: chatrooms: { id: <object_id> members: [<user_id>] } messages: { room: <object_id> pageIndex: <integer> messages: [ { datetime: <datetime> message: <text> author: <user_id> } ] }

Google
Roman
02.08.2017
16:51:38
но там опять возникает вопрос по atomicity... что если нужно удалить чатрум, а во время удаления 10 документов удалились лишь 3 и сервер рухнул... 7 документов остаются в бд хотя система про чатрум забывает ? в результате uncollected garbage

Sergey
02.08.2017
16:55:01
Он не мешает консистентности базы. Ну и можно в бекграунде чистить

Ну или сначала чатрум скрывать, а удалять только после удаления всех документов

yopp
02.08.2017
16:56:35
Зачем удалять?

Roman
02.08.2017
16:56:42
Он не мешает консистентности базы. Ну и можно в бекграунде чистить
просто мусор набирается... а чистить чёт не каеф, считай в определённом интервале проходить по ВСЕМ chat page документов, проверять их ID и определять, удалять или нет

yopp
02.08.2017
16:57:12
Флаг поставил в чятруме. А сообщения роботам скормил. Они за это могут всякой смешной бигдаты наварить

Не понимаю зачем в 2017 году данные удалять.

Roman
02.08.2017
16:57:47
Ну или сначала чатрум скрывать, а удалять только после удаления всех документов
мы в принципе не можем определить "удаление всех релевантных документов" по причине отсутствия транзакций

Roman
02.08.2017
16:59:34
ну хотя если флаг ставить именно в chatroom документе тогда да

типа archived: bool

yopp
02.08.2017
16:59:58
Именно

Sergey
02.08.2017
17:00:00
Вот, кстати, @dd_bb дело говорит. Зачем удалять вообще?

Roman
02.08.2017
17:00:09
тогда операция атомарна

согласен, да, оставляешь page'ы, атомарно ставишь флаг archived и готово

отлично, ну вроде как всё встало на свои места, спасибо!

kode
03.08.2017
00:05:00
привет всем. резко перестала работать и монга и млаб. в чем прикол?

убунта, сервер на ноде

тупо все запросы по роутам где обращения в базе улетают в pending

ничего не обновлялось. систему перегружал. старый рабочий 100% проект пробую - та же срань

Google
kode
03.08.2017
00:06:00
я в шоке

сука. заработала. НИХЕРА НЕ ДЕЛАЛ

это пиздец какой-то, ебанное гавно монга

кто-то пробовал RethinkDB?

?

GNU/Docker
03.08.2017
09:15:51
это пиздец какой-то, ебанное гавно монга
Ты серьезно прикатился в чат чтобы изречь вот это?

Tenni
03.08.2017
09:16:33
Ты серьезно прикатился в чат чтобы изречь вот это?
монга во всем виновата же, очевидно

Sergey
03.08.2017
09:38:08
Ребят, а то, что в db. printSlaveReplicationInfo() и в rs.status() периодически проскакивают отрицательные числа - это норма или стоит беспокоиться? NTP есть.

Tenni
03.08.2017
09:41:49
у меня тоже бывает, единица обычно, ничего такого

yopp
03.08.2017
11:29:59
NTP — eventually consistent, так что есть шанс что в единицу времени у тебя дрифт между нодами ненулевой

Sergey
03.08.2017
11:32:02
Но не в секунду же или даже больше

yopp
03.08.2017
11:32:29
В секунду и даже больше ;)

Каждая из нод отстаёт от источника точного времени на 500мс, но с разным знаком. Дельта между нодами уже секунда

Viktor
03.08.2017
11:34:45
Дрифт в секунду и больше разве норма? Особенно если стоит свой ntp сервер ( а то и два) в своей подсети с нодами

yopp
03.08.2017
11:35:05
Ох

Всем CAP теорему в этом чяте.

Viktor
03.08.2017
11:35:39
Прочитана

Страница 113 из 342