рекомендации для dbms для системы EAV, в которой в основном нужны операции вставки и выбора в стеке .net - PullRequest
0 голосов
/ 16 января 2012

В проекте, над которым я работал, требования к моделированию данных:

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

Система будет в основном иметь:

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

Требования отражают модель данных сущность-атрибут-значение (EAV). После исследования иногда я чувствую, что реляционные базы данных, такие как Sql Server, могут не подходить для этого. (поправьте меня, если я ошибаюсь!)

Так что я склоняюсь к варианту NoSql, например, MongoDb / CouchDb / RavenDb и т. Д. Мои вопросы:

  1. Что лучше всего подходит для доступных решений NoSql, учитывая тяжелые потребности в вставке / выборе моей системы?
  2. Я также открыт для реляционного варианта, если эти требования можно перевести в реляционную схему. Хотя я лично сомневаюсь в этом, но после прочтения ответов администратора БД (например, , на которые здесь ссылаются ), мне стало любопытно. Однако я не мог найти себе оптимальную реляционную модель для моих требований, возможно, система была довольно общей.

спасибо!

1 Ответ

0 голосов
/ 17 января 2012

MongoDB действительно сияет, когда вы записываете в него неструктурированные данные (например, ваше событие).Кроме того, он способен выдерживать довольно большую нагрузку при записи.Тем не менее, это не очень хорошо для отчетности.По крайней мере, для отчетности в традиционном смысле.

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

Такое гибридное решение довольно распространено (по моему опыту).

...