Как я узнаю, что мои данные носят реляционный или объектно-ориентированный характер?

16

Просто прочитайте эти строки

  • Если ваши данные носят объектный характер, используйте хранилища объектов («NoSQL»). Они будут намного быстрее, чем реляционная база данных.

  • Если ваши данные носят реляционный характер, затраты на реляционную базу данных того стоят.

из-

http://seldo.com/weblog/2011/06/15/orm_is_an_antipattern

Итак, как мне узнать, являются ли мои данные реляционными по природе или объектно-ориентированными?

Gulshan
источник
Расскажите нам больше о ваших данных ...
FrustratedWithFormsDesigner
7
@FrustratedWithFormsDesigner Я думаю, он ищет общие рекомендации.
К. Росс
Строка, которая говорит о «хранилищах значений ключей, которые позволят вам хранить элегантные, автономные структуры данных в огромных количествах и получать к ним доступ с молниеносной скоростью», по-видимому, описывает данные «объектов», которые должны использоваться в NoSQL - в основном это звучит как «автономные» порции данных без ссылок или связей с другими порциями данных ... Я не могу привести хорошие примеры этого, потому что это не то, с чем я привык работать (по крайней мере, не в этом контексте) ,
FrustratedWithFormsDesigner
Только что получил эту ссылку. Надеюсь, что у него есть подсказки, чтобы ответить- highscalability.com/blog/2011/6/15/…
Гульшан

Ответы:

16

На риск быть застреленным, я попробую простое английское определение.

«Реляционная природа» для меня переводится как: все элементы определенного типа имеют почти одинаковые атрибуты, что упрощает создание простой таблицы, но все элементы в этой таблице и затем SQL для выполнения CRUD и поиска. Кроме того, если ваши данные можно смоделировать так, чтобы все элементы имели один из ограниченного набора типов, вы можете определить структуру реляционных данных, которая соответствует этому набору типов.

«Природа объекта» переводится следующим образом: Предметы сходного типа могут иметь широкий спектр атрибутов, и эти атрибуты могут иметь самые разнообразные свойства и тип. Очень часто это можно (с достаточным усилием) перевести в реляционную модель, но многие таблицы будут заполнены очень редко, и в результате вы получите очень неэффективные соединения LEFT OUTER, что снижает производительность реляционной базы данных по сравнению с ней. в базу данных NOSQL.

Я должен сказать, что с моей точки зрения нет строгой линии, разделяющей эти два. Вероятно, вы можете найти любое количество примеров, которые попадают где-то между этими двумя крайностями.

Хорошо, теперь я открыл себя снайперам со всех сторон. Любые комментарии приветствуются. Посмотрим, сможем ли мы улучшить это определение вместе.

wolfgangsz
источник
1
На самом деле, как человек, который изначально насмехался над простотой вопроса, я должен сказать браво за понятный и проницательный ответ. Вы должны посмотреть на написание книг.
Филипп
Можем ли мы резюмировать это как «слишком много ЛЕВЫХ НАРУЖНЫХ СОЕДИНЕНИЙ в реляционном дизайне» или нет?
Гюльшан
Я бы не решался сделать такое упрощение. Это один из симптомов, но не единственный.
wolfgangsz
Немного примера, пожалуйста?
Гюльшан
Допустим, вы храните информацию о людях. Любой человек может иметь любую комбинацию атрибутов из набора 300. Все они могут появляться несколько раз или не появляться вообще. Некоторые из них состоят из других комбинаций атрибутов, то есть они являются множествами. И теперь вы хотите найти всех людей, у которых определенного атрибута либо нет, либо нет определенного значения. Это та вещь, которая сведет с ума ваш обычный конструктор SQL-запросов.
wolfgangsz
5

Данные оба.

(Строго говоря, это не может быть объект в природе, потому что ему не хватает поведения, но мы не будем придирчивы).

Решение о хранении данных в базе данных RDBMS или NoSQL больше зависит от того, как вы собираетесь использовать данные , а не от реальной «природы» самих данных.

Если вы намереваетесь поддерживать все виды навигационных путей к данным, вы можете сохранить данные в СУБД, поскольку у вас будут разные способы доступа и представления данных. Вам нужна база данных, чтобы сделать много тяжелой работы для вас. Например, данные «Заказа» могут быть доступны через клиента, менеджера по продажам, sku (товар), дату, регион и т. Д.

С другой стороны, если у вас есть минимальные навигационные пути, вы можете просто сохранить весь объект. Например, «Корзина», доступ к которой осуществляется только через веб-интерфейс и которая долго не сохраняется или не анализируется, может лучше подходить для хранилища NoSQL. Жертва, которую вы приносите с (значение документа или ключа) хранилищами данных NoSQL, заключается в том, что вы обходитесь без связей между коллекциями - если вам не нужны эти связи (для навигационных путей, специальных запросов или отчетов), и позаботьтесь о них в своем приложение, тогда ты будешь в порядке.

Конечно, вы можете хранить данные в обоих по разным причинам, но у этого есть свои недостатки.

Саймон Манро
источник
2

Данные не являются «объектами в природе» или «реляционными по природе». Любые данные могут быть представлены как в реляционной, так и в объектной модели / графической структуре. Что подходит, зависит от того, как данные будут использоваться приложениями. Часто у вас может быть и то и другое. Например, данные, используемые на веб-сайте, могут храниться в реляционной базе данных, но по требованию загружаться в графическую структуру, которая затем кэшируется в хранилище значений ключей в памяти.

Утверждение, что объект хранит / NoSql будет быстрее, чем реляционные для некоторых видов данных, просто неверно. И снова важно то, как ваше приложение использует данные, а не форма самих данных. Хранилище объектов будет быстрее при загрузке графа объектов, хранящегося как единое целое, но будет намного медленнее при специальных запросах по многим объектам или при обновлении свойств многих объектов.

JacquesB
источник
0

Я думаю, что ключевая строка из статьи:

"Likewise, sometimes the output will be a single object X, which is easy to represent. But sometimes the output will be a grid of aggregate data, or a single integer count"

Мне кажется, что автор делает хорошее замечание, что если ваш код, например, получает количество клиентов в Испании для некоторой логики, вам не следует заполнять список клиентов всеми клиентами в Испании, а затем считать объекты заказчика. (к которому ORM может подтолкнуть вас)

Очевидно, по самой структуре данных клиента невозможно определить, будет ли она использоваться таким образом. поэтому я думаю, что мы должны интерпретировать «данные» как «всю информацию, используемую вашим приложением». Если это включает в себя такие вещи, как агрегаты или «Все X, связанные с Y», тогда ваши «данные» не подходят для атомарного подхода NoSql

Ewan
источник