Форум сайта python.su
blessmasterЯ не понял смысла этой фразы. Вы подтверждаете мое высказывание, но почему то делаете это в опровергающем стиле.
Какбэ необходимость требует по зависимости возможность.
blessmasterНикакого. Нельзя использовать методы (и их наличие или отсутствие) работы с реляционными БД (объединение таблиц в запросе) для оценки качества объектных.
Какое отношение это имеет к реляционности как качеству БД?
blessmasterДля реляционных СУБД, на примере MS SQL Server.
Каким образом? Что технически ускоряет? Я пока вижу только один фактор - данные одного типа более разрежены, что при чтении требует обращение к большему числу дисковых страниц (вероятность найти соседние записи на одной дисковой странице - ниже).
blessmasterКак я писал выше, это
О рекомендуемых случаях применения, я бы не против узнать. В данном топике рассматривается один из случаев, когда рекомендуется попробовать.
blessmasterУточню только по поводу отличия ХП.
JavaScript, если я верно понял то, что прочитал о Монго, - блокирующая часть для всей базы, в отличие от хранимых процедур и вероятно, от реализаций map/reduce в других базах, поправьте, если ошибаюсь.
blessmasterЯ вполне допускаю, что описанная автором ситуация могла возникнуть вследствие внезапно изменившихся требований.
Как, говорится, “знал бы где упадёшь, - соломки б подстелил”.
Офлайн
Lexanderкстати п.1 очень важен, ещё дополню:blessmasterКак я писал выше, это
О рекомендуемых случаях применения, я бы не против узнать. В данном топике рассматривается один из случаев, когда рекомендуется попробовать.
- скорость разработки/поддержки при достаточном уровне производительности,
- реализация функционала, недоступного для встроенного языка запросов.
Для п.2. есть разумная граница применения. Это не должен быть костыль, который закрывает недоработки/недостатки архитектуры/структуры.
Офлайн
LexanderРазве в моей фразе есть опровержение? Всего лишь утверждение, что необходимость никуда не девается от отсутствия возможности. Опровергается другое подразумевающееся утверждение, что раз не равно, то значит и не надо.
Вы подтверждаете мое высказывание, но почему то делаете это в опровергающем стиле
LexanderВ обсуждемом примере нет объединения таблиц. Есть объединение результирующего множества и необходимость провести по нему выборку и сортировку.
Нельзя использовать методы (и их наличие или отсутствие) работы с реляционными БД (объединение таблиц в запросе) для оценки качества объектных.
LexanderНе буду цитировать полностью, можно прочитать в посте выше. Рассматривается абстрактная ситуация, когда каждая из таблиц будет полностью перечитываться при каждом запросе, что обычно неверно, не учитывается, что подобное разнесение по таблицам значительно снижает сам объём данных, который нужно анализировать (иначе подобное разнесение лишается смысла) и в итоге может оказаться, что придётся прочитать на порядки меньше, чем в сплошной денормализованной таблице. На практике одним из основных инструментов управления производительностью является возможность выбора между нормализацией и денормализацией.
И чем больше таблиц в запросе, тем больше дисковых страниц нужно считать и тем больше будет обращений к дисковой подсистеме.
o7412369815963Не холивара ради, но это не для всех реляционных баз верное утверждение.
- хорошие возможности недоступные в реляцБД, например работа с массивами - мега. фича.
Отредактировано (Дек. 4, 2011 16:04:16)
Офлайн
blessmasterСорри, изучил вопрос DBRef подробней и не нашёл, как DBRef использовать в запросе, то есть джойном он не является и задачу поиска не решает никак, так что он куда ближе к велосипеду из третьего пункта, только с чуть меньшим количеством телодвижений.
2) Есть DBRef, который назвать нереляционным язык не поворачивается, а в случае запроса - суть замаскированный джойн. Поэтому данный вариант никак не вписывается в Вашу модель.
Generally, for “contains” relationships between entities, embedding should be be chosen. Use linking when not using linking would result in duplication of data.Мысль сводится к “следует выбирать внедрение данных в документ, вместо создания новых сущностей, но если внедрение приведёт к дублированию данных - нужно использовать связывание”. То бишь, нормализация не забыта и рекомендуется, но средств для работы с нормализованными данными, около нуля. Печально…
http://www.mongodb.org/display/DOCS/Schema+Design
Отредактировано (Дек. 4, 2011 16:34:48)
Офлайн
:( многа буков,
> Не холивара ради, но это не для всех реляционных баз верное утверждение.
Возможно, пример приведете?
> Допустим, мы делаем социальную сеть
> 1. Человеку нужно показать последние сообщения и фотографии его друзей, участников его групп.
> 2. Нужно найти последние фото и статьи близких человеку по интересам людей
> 3. Мы проводим социологическое исследование и нас интересуют а) комментарии людей ассоциированных с какой-либо темой, а также б) комментарии людей близких первым людям.
Я сейчас разрабатываю соц. сеть для забугорной компании, у меня оно так:
1.
1) получаем друзей, // можно и без этого запроса, зависит от реализации
2) получаем 20 последних событий (фото, сообщения …), где автор входит в список друзей.
итого: 1, 2 запроса
2. так же, только фильтр по интересам.
3. а) непонятно, что за тема? пример?
б) типа комменты друзей моих друзей? - так же как п.1, только +1 запрос на получение всех друзей моих друзей.
> 1) Вариант с хранением полного профиля человека в каждой записи я отвергаю как невероятный из-за объёма данных, так и создающий огромную нагрузку на дисковую систему в случае малейшего редактирования профиля.
В некоторых случаях выгоднее хранить ссылку, в некоторых часть профиля.
Пример:
В каждом сообщении нужно выводить имя и фотку автора, у пользователя 30 сообщений на странице от разных авторов, просмотров в день 1000, сам пользователь оставил 100 сообщений, пользователь меняет фотку/имя раз в месяц.
Если храним ссылки в сообщениях: 30 (авторов от сообщений) * 1000 (просмотров) * 30 (дней) = 900к запросов к авторам
Если храним имя и фотку в сообщении: 1 (обновлений в месяц) * (сообщений у пользователя) = 1 update на 100 сообщений.
Сравнение для примера, в данном случае видно что хранить часть информации выгоднее, при том что этот “большой” update можно делать потихоньку, в фоновом режиме, ничего страшного если несколько секунд/минут фотки будут разные в сообщениях.
Офлайн
Не спец по базам данных, поэтому поинтересуюсь.
может разница в след пунктах?
1 при разработке с нереляционной DB меньше трудоемкость поскольку проще ORM.
2 В обычной DB все очень плоско и доступно - те все таблицы глобальны нет скрытых полей(колонок) нет наследования и т.п. Для проектов с большим количеством таблиц/классов это затрудняет разработку.
3 В объектной базе легко реализовать (или уже встроены) специализированные быстрые алгоритмы поиска, отличные от индексированного поиска в больших таблицах строго упорядоченных ключей. Те поддерживаются многомерные массивы
, rtree и.т.п. Конечно такие индексы поддерживаются и обычными RDB, но Мне кажется что конструирование своих индексов в них затруднено (точнее как и в объектных DB они переедут в программную часть).
Отредактировано (Дек. 4, 2011 20:09:23)
Офлайн
blessmasterКак же нет? В 1-м посте автор темы указал необходимость объединить данные 2-х коллекций. Коллекция=таблица.
В обсуждемом примере нет объединения таблиц. Есть объединение результирующего множества и необходимость провести по нему выборку и сортировку.
blessmasterДавайте для начала вспомним, что использование табличного способа хранения данных - это костыль.
Хорошо, есть вообще какая-то ясно описанная граница для NoSQL, а ещё лучше Mongo, где метод доступа “реляционен”, а где - нет? Так-то делать - по-монговски, а так-то - реляционщина?
blessmasterJS разный бывает.
По поводу JS, таки скажите: он действительно блокирует всю базу на время своего выполнения (не важно на какое время), либо несколько разных скриптов могут выполняться параллельно и при этом отрабатываться другие запросы (допустим, ядер для этого хватает, дисковая нагрузка балансируется)?
blessmasterЭто не совсем так. Вы опять отталкиваете от реляционной практики.
Мысль сводится к “следует выбирать внедрение данных в документ, вместо создания новых сущностей, но если внедрение приведёт к дублированию данных - нужно использовать связывание”. То бишь, нормализация не забыта и рекомендуется, но средств для работы с нормализованными данными, около нуля. Печально…
Офлайн
Кстати, о стиле написания запросов.
Написать 2-3 запроса для формирования 1-й экранной страницы данных - это нормально в мире Монго.
При чем не только из-за простоты кода, но и потому, что объем занимаемой памяти каждым запросом для генерации 20-30 строк информации небольшой.
То же самое для РБД - тоже нормально.
Хотя есть возможность оформить получение данных одним запросом. И это тоже нормально. Но для РБД.
Офлайн
LexanderОчень сильное утверждение. Обосновать сможете?
Давайте для начала вспомним, что использование табличного способа хранения данных - это костыль.
В свое время были причины его использовать, почему и зачем - не будем сейчас об этом.
Вернемся в наше время.
Офлайн
PooHЯ по большей части согласен с этим.LexanderОчень сильное утверждение. Обосновать сможете?
Давайте для начала вспомним, что использование табличного способа хранения данных - это костыль.
В свое время были причины его использовать, почему и зачем - не будем сейчас об этом.
Вернемся в наше время.
Офлайн