Уведомления

Группа в Telegram: @pythonsu

#1 Июль 8, 2013 07:33:33

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Для чего нужен dbref в mongoenigne

Здравствуйте!

Для чего нужен dbref в mongoenigne ?

city = db.ReferenceField(City, required=True, dbref=True)
city = db.ReferenceField(City, required=True)

И как правильней будет, с ним или без него ?)



Офлайн

#2 Июль 9, 2013 21:12:27

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Для чего нужен dbref в mongoenigne

dbref - Это тип из bson (pymongo), содержит имя коллекции + идентификатор

с mongoenigne не знаком, но могу предположить что без dbref, ссылки будут хранится в виде ObjectId - только идентификатор,
с dbref=True, будут хранится в виде DBRef, т.е. + имя коллекции.

без dbref можно работать если вы точно знаете в какой коллекции лежит документ, если это не фиксируется, либо возможные документы могут лежать в разных коллекциях, то необходимо dbref.

так же можно обойтись без dbref если все данные лежат в одной коллекции (но это не желательно для больших проектов)

Офлайн

#3 Июль 10, 2013 00:52:35

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Для чего нужен dbref в mongoenigne

Я уточню.
Нужно обходится без DBRef, если это позволяет система.
Предпочтительный и рекомендуемой способ для большинства систем - ручные ссылки на _id, получаемый перед началом операции с помощью ObjectId().



Офлайн

#4 Июль 10, 2013 15:51:53

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Для чего нужен dbref в mongoenigne

Lexander
Предпочтительный и рекомендуемой способ для большинства систем - ручные ссылки на _id, получаемый перед началом операции с помощью ObjectId().
в смысле вручную генерировать _id? почему он предпочтительный?

Офлайн

#5 Июль 10, 2013 17:05:09

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Для чего нужен dbref в mongoenigne

А он и так всегда вручную генерируется.
Некоторые библиотеки просто неявно вызывают ObjectId(), но смысл от этого не меняется.
Так написано в официальной документации.
Возможно, как-то связано с внутренними алгоритмами.

ЗЫ
Кроме указанного вами случая разных коллекций.



Офлайн

#6 Июль 10, 2013 20:56:00

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Для чего нужен dbref в mongoenigne

o7412369815963
в смысле вручную генерировать _id? почему он предпочтительный?
я подумал про идентификаторы вида: 1,2,3,'A','B','X',…

Lexander
Так написано в официальной документации.
Согласен с документацией, тут может быть плюс в том что идентификатор может создаваться не тем процессом который записывает документ, или вообще документ не будет записан.
Например клиент создал идентификатор и отправил серверу указ выполнить обработку и сохранить по указаному идентификатору не дожидаясь ответа. В случае автоинкрементного (например в mysql) нужно было-б дождаться ответа с идентификатором, хотя можно реализовать вариант как с objectid, но я не видел что-б кто-то так делал в *sql, а в mongodb это основной вариант.

Офлайн

#7 Июль 10, 2013 22:00:57

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Для чего нужен dbref в mongoenigne

o7412369815963
я подумал про идентификаторы вида: 1,2,3,'A','B','X',…
Самое интересное, что так тоже можно делать. :)
В смысле есть возможность.
Вопрос смысла и необходимости.

Например, если нужно сделать специфические правила шардинга, обусловленные бизнес-логикой, и сам шардинг настроен по _id.



Офлайн

#8 Июль 11, 2013 07:49:52

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Для чего нужен dbref в mongoenigne

Lexander
Самое интересное, что так тоже можно делать. :)
Я кстати тестировал скорость чтения на mongodb 1.6, нумератор (1,2,3…) vs objectID для _id. Дак с ObjectId почему то было быстрее на 20-30%.

Офлайн

#9 Июль 11, 2013 10:11:24

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Для чего нужен dbref в mongoenigne

Интересное поведение.
Как думаете, почему?



Офлайн

#10 Июль 11, 2013 12:11:15

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Для чего нужен dbref в mongoenigne

хз, может простые типы нужно было подготавливать перед помещением/поиском в индекс, например в хеш переводить. а ObjectID работает как есть.
считаю что сейчас это уже не актуально и нужно заново тестировать, т.к. монга сильно продвинулась.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version