Схема интернет-магазина - Document Db - PullRequest
0 голосов
/ 20 мая 2010

Я хотел бы оценить документ db, вероятно, dong монго в веб-магазине ASP.Net MVC.

Немного рассуждений в начале:

Существует около 2 миллионов продуктов.

Модель продукта была бы довольно плохой для rdbms, поскольку было бы много различных видов продуктов с уникальными атрибутами.

Например, были бы книги с именами isbn, авторами, заголовками, страницами и т. Д., А также DVD-диски со временем воспроизведения, режиссерами, артистами и т. Д. И еще немало типов.

В итоге у меня будет около 9 различных продуктов с общим числом столбцов (считая общие столбцы, такие как заголовок только один раз) примерно от 70 до 100, тогда как каждый отдельный продукт имеет максимум 15 столбцов.

В СУРБД обычно используются три способа:

Модель EAV, которая имела бы довольно плохие характеристики производительности и делала бы ее либо непрактичной, либо работала бы еще хуже, если бы я хотела отобразить автора книги в списке различных продуктов (например, стартовой страницы, рекомендуемых продуктов и т. Д.) .

Не обращайте внимания на количество столбцов и поместите все это в таблицу продуктов: хотя я имею дело с базами данных несколько большего размера (по строкам), у меня нет опыта работы с таблицами с более чем 20 столбцами, поскольку предполагается производительность, но я думаю, 100 столбцов будут иметь некоторые последствия.

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

C # Водитель / Классы:

Я бы хотел использовать драйвер NoRM, и до сих пор, я думаю, я попытаюсь создать dto продукта, который содержит все свойства (сгруппированные в классы детализации, такие как детали книги, за исключением тех свойств, которые должны отображаться в представлениях списка так далее.).

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

Мои вопросы сейчас:

  1. Допустимы ли мои проблемы с производительностью при использовании подхода с несколькими столбцами?

  2. Я что-то упустил из виду, и есть намного лучший способ сделать это в СУБД?

  3. Достаточно ли стабильно MongoDb в Windows?

  4. Имеет ли смысл мой подход с различными обертками поведения?

1 Ответ

0 голосов
/ 24 мая 2010

Допустимы ли мои проблемы с производительностью при использовании подхода с несколькими столбцами?

Честно говоря, я не думаю, что производительность действительно является ключевой проблемой здесь. Если у вас есть 2M строк с 100 столбцами, и эти столбцы никогда не изменяются, то SQL Server / MySQL / и т. Д. На самом деле будет хорошо Это может занять много ненужного места, но БД, вероятно, будет работать достаточно хорошо.

Чего БД не сделает, так это примет любые изменения с готовностью, и я думаю, что это главное. Попытка добавить столбец в центральную таблицу с 2M строками будет просто кошмаром. Вы можете «разбить» отдельные поля на отдельные вложенные таблицы, но это не обязательно решает проблему, а только задерживает ее. EAV также является своего рода кошмаром, поскольку теперь вы берете свои 2M строки и конвертируете их в 20M строк.

Я что-то упустил, и есть намного лучший способ сделать это в СУБД?

Пока вы готовы пойти на обычные жертвы RDBMS, вы, вероятно, обнаружите, что MongoDB намного быстрее, проще и гибче для базового CRUD.

Достаточно ли стабильно MongoDb в Windows?

Я не могу говорить с этим. На форумах определенно есть люди, работающие на Windows. Но 2M records - это по-настоящему маленькая картошка для большинства людей, которые ее используют.

Имеет ли смысл мой подход с различными обертками поведения?

Вы предлагаете следующее?

  • Все данных о продукте хранятся в одной коллекции .
  • Каждый продукт помечен типом, поэтому при доступе к коду загружается соответствующий «класс-обертка».

Если так, то я думаю, что это путь. Таким образом, вы можете реализовать бизнес-логику (книги должны иметь номера ISBN), в то же время делая хранилище действительно простым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...