Alex
на чтение
Alex
не проверял но скорее всего так и будет
yopp
почему чем-то? именно он и будет. seq scan по индексу
yopp
быстрее чем по документам, на порядок. но если нам надо чтоб 1 документ достать проехаться по 1кк ключей индекса — это пипец плохо
Alex
потому что не хочется делать голословных утверждений :) не сильно знаю как в монге это реализовано
yopp
в mmap всё иначе, а в wt там всё таблица wt
yopp
и данные (ключ _id, значение bson блоб)
Alex
ясно
yopp
и индексы (ключ — ключ, значение — указатель на документы)
Serhio
Подскажите, может кто вкурсе: у монги закончилось место и демон сдох. Датасет прочекали с —repair, все завершилось как надою. После этого осталось 2 коллекции побитых, на запросах к ним монга выругивается таким вот образом: [conn190] WiredTiger error (0) [1491784952:284589][1:0x7ff4c70ae700], file:collection-653-9180463724287886924.wt, WT_CURSOR.search: read checksum error for 16384B block at offset 12676222976: block header checksum of 3612947089 doesn't match expected checksum of 321045208 дальше рестарт и до нового обращения к данной коллекции. Интересует собственно есть ли возможность без даунтайма починить, например удалением коллекции?
yopp
если данные в коллекции не нужны, то да, просто удаляешь
yopp
если данные нужны, то копируешь файл .wt с данными, потом удаляешь коллекцию и развлекаешься с чтением сырого .wt
Serhio
да этот способ известен, копипаста делается только с выключеной базой?
yopp
fsync command with the lock option can ensure that the data files do not change for MongoDB instances using either the MMAPv1 or the WiredTiger storage engines, thus providing consistency for the purposes of creating backups
yopp
3.2+
Serhio
Ага, благодарю, логично же) но сервис придется остановить который юзает коллекцию
yopp
вообще если в коллекцию никто не пишет, можешь скопировать на ходу
yopp
она у тебя и так уже битая
yopp
а любая операция на чтение с ошибкой падает?
yopp
или только конкретная?
yopp
я бы ещё праймари индекс снял
yopp
в смысле .wt который _id держит
Serhio
Часть данных читается падает по одинаковому оффсету
yopp
по крайней мере можно будет получить список айдишников документов и попробовать по одному вытащить
yopp
а большая коллекция?
Serhio
При обращении к определённому месту. Коллекция на 16 гиг да она не нужна в принципе
yopp
если не нужна, то дешевле дропнуть
Serhio
Была ссылка на статью, могу позже поискать, там кроме wt файлов для расковыривания сырых данных копипастили еще и другие, вопрос на будущее хватит одного wt файла или остальные относящиеся к движку тоже тащить
yopp
поищи. но структура в .wt очень простая
yopp
у тебя есть .wt для bson и .wt для индексов. т.е. минимально всегда два хранилища: data & _id
yopp
исходя из того что _id тоже часть bson, просто .wt с данными хватит
yopp
но учитывая что wt это CoW, там есть ряд НЮАНСОВ
Serhio
-rw-r--r-- 1 root root 4738772992 Feb 9 14:06 collection-2657--1723320556100349955.wt -rw-r--r-- 1 root root 1155072 Feb 9 14:05 _mdb_catalog.wt -rw-r--r-- 1 root root 26935296 Feb 9 14:05 sizeStorer.wt -rw-r--r-- 1 root root 95 Feb 9 14:05 storage.bson -rw-r--r-- 1 root root 46 Feb 9 14:04 WiredTiger -rw-r--r-- 1 root root 495 Feb 9 14:04 WiredTiger.basecfg -rw-r--r-- 1 root root 21 Feb 9 14:04 WiredTiger.lock -rw-r--r-- 1 root root 916 Feb 9 14:04 WiredTiger.turtle -rw-r--r-- 1 root root 10436608 Feb 9 14:04 WiredTiger.wt
Serhio
Вот список из статьи
yopp
а что за статья?
Serhio
Сек
yopp
sizeStorer.wt ммм
Serhio
http://www.alexbevi.com/blog/2016/02/10/recovering-a-wiredtiger-collection-from-a-corrupt-mongodb-installation/
yopp
а
yopp
ну тут не сырое ковыряние :)
Serhio
Ага тогда понял
yopp
но идея интересная!
yopp
Вобщем-то оно скорее всего использует последнюю корректную сессию, для того чтоб восстановить Point-in-time структуру, которая корректна
yopp
что на самом деле очень хороший способ вытащить хоть что-то
Serhio
Понятно, спасибо) у нас не критично там сыгранные партии в пасьянс хранятся
yopp
последнее корректно нужно читать как консистента
yopp
А, да. Пока у меня острый пиздец не прошел, можно с пользой провести время: если кто-то готов побыть, гхм, /альфатестером/ (так-же круто как быть альфа-самцом!) штуки для мониторинга которую я начал клепать, напишите мне в личечку. Скажите какая у вас топология, сколько данных и сколько коллекций.
yopp
Я очень плохо скейлюсь, настало время себя автоматизировать!
yopp
но зачем?
yopp
именно id, не _id?
yopp
Это не отменяет вопроса зачем uuid вместо objectid
yopp
uuid.v4 ничем не лучше чем objectid
yopp
я не знаю кто тут это говорил, но это звучит как бред
yopp
и что значит «не секурно»
yopp
о какой модели угроз мы говорим?
Alex
я думаю про какой нить enumeration attack
Alex
или как там это правильно называется
yopp
перебор айдишников?
Alex
имхо, скорее всего да
Alex
так как другие угрозы тут сложно увидеть
yopp
надо обладать исключительными умственными способностями чтоб использовать oid как какой-то секретный ключ
yopp
впрочем как и uuid :)
yopp
потому что дешевле просто сгенерировать случайный чанк из 256 бит и конвернуть его в base62 или bas64_urlsafe.
Alex
я думаю скорее тут проблема в том что люди вместо того чтобы проверять наличие прав на доступ к какому то объекту хотят это решить случайными значениями.
Alex
что как бы лол
Alex
я думаю права проверять всё же корректней.
Alex
на доступ по ID
Alex
через API
yopp
кто сказал-то?
yopp
потому что просто заявлять что objectid — хуета, это очень глупо
yopp
исходить надо из применения.
yopp
если у тебя есть проверка прав, то зачем вообще что-то изобретать
yopp
всё что можно узнать из айдишника — machine id, pid и дату.
yopp
всё зависит от кейсов, но я в целом не вижу смысла заводить дублируюий _id ключ, за исключением редких кейсов
yopp
ехал кейс через кейс
Alex
главное чтобы проверял не только доступ к url но и наличие доступа к объекту у текущего пользователя
Alexander
Рибята!
Alexander
Кто как монгу учить начинал? Посоветуйте годных туториалов
Alexander
Желательно там где в связке с NodeJS, а не с php
Alex 🪗
я придумал себе проект спецом для изучения ноды и монги