Хранение реляционных данных на основе документов
Должен ли я хранить свои реляционные данные в MongoDB?
Любое понимание моей уникальной ситуации (обрисовано в общих чертах ниже) будет с благодарностью! Как и в любом проекте, мои ресурсы чрезвычайно ограничены. Я стремлюсь улучшить производительность при минимальных затратах.:)
Фон
- Я работаю над проектом с обширной и сложной моделью данных.
- 84 первичных стола
- 44 просмотра во вторичные таблицы
- 600 тыс. Экземпляров основного типа
- 500000000+ кортежей, поддерживающих 600000 основных предметов
- Модель хорошо нормализована и хорошо продумана.
- Многие предметы были денормализованы для производительности.
- Наш уровень доступа к данным использует Hibernate для ORM.
Постановка задачи
Hibernate объединяет 84 таблицы + 44 представления вместе для сопоставления первичного элемента данных (я буду называть первичный элемент данных THEObject). Эта конструкция чрезвычайно дорогая (один узел Oracle db). Сборка THEObject и его детей может занять несколько минут.
Между экземплярами THEObject очень мало данных. Данные, которые являются общими, в основном доступны только для чтения (наподобие пользовательских данных, ссылки на общую конфигурацию...)
Сохранение THEObject также чрезвычайно дорого.
В качестве побочного проекта я создал набор bean-компонентов для представления данных THEObject, скопировал данные из дорогого экземпляра THEObject в bean-компоненты, а затем сериализовал bean-компонент в XML с использованием xstream. Преобразование из THEObject в бин, сериализация бина и хранение XML, представляющего бин, заняли всего 26 мс. (Нигде около 6 минут, необходимых для сохранения THEObject обратно, используя спящий режим поверх нашего реляционного представления). Оо
Я думаю, что мое приложение будет лучше обслуживаться базой данных на основе документов, потому что данные, с которыми я работаю, делятся на 3 основных типа чанков (интеллектуальные коллекции), а чанк, представляющий THEObject, разделяет данные от 2 других основных чанков, но не разделяет любые свои собственные данные среди других экземпляров THEObject. Это позволило бы мне прочитать THEObject как единое целое без каких-либо объединений или снижения производительности, связанного с нормализованным хранением.
Разумно ли хранить мои данные в базе данных на основе документов, несмотря на то, что это действительно реляционные данные?!
Релевантное чтение
Почему я должен использовать базу данных на основе документов вместо реляционной базы данных?
Нереляционный дизайн базы данных
Что такое NoSQL, как он работает и какие преимущества он дает?