SQL
При использовании инструментов уровня Teradata может быть возможным решение на основе SQL.Я недавно наткнулся на статью о дизайне базы данных , в которой обсуждалось «моделирование якорей» .
По сути, идея состоит в том, чтобы создать один тупой синтетический первичный ключтаблица, в то время как все реальные или метаданные живут в других таблицах (подмножествах) и присоединяются посредством внешнего ключа + объединения.,Во-первых, вы можете легче разделить хранилище данных либо по организационным причинам, либо по соображениям производительности.Во-вторых, вы создаете только дополнительные строки для записей, в которых содержится данных в любом заданном подмножестве, поэтому вы используете меньше места, а индексирование и поиск выполняются быстрее.
Подмножества могут основываться на сопровождающем или некоторых другихкритерии.XML set / get будет для каждого подмножества / записи (а не для глобальной записи).Все подмножества для заданных записей могут быть составлены и кэшированы.Дополнительные подмножества могут быть созданы для метаданных, поисковых индексов и т. Д., И они могут запрашиваться независимо.
NoSQL
NoSQL кажется похожим на LDAP (теоретически, по крайней мере), но преимуществохороший инструмент NoSQL будет включать в себя большую абстракцию метаданных, управление версиями и организацию.Фактически, из того, что я прочитал, кажется, что хранилища данных NoSQL предназначены для решения некоторых проблем, которые вы затронули в отношении масштабирования и слабо структурированных данных.Есть хороший вопрос по SO, касающийся хранилищ данных .
Production NoSQL
. Не так много, есть несколько крупных компаний, использующих NoSQL в масштабируемых средах, таких как Google Bigtable .Похоже, идеальный инструмент для:
6) поиск одной записи должен быть возвращен в течение секунд7) Система должна поддерживать максимум 1 миллион запросов в час.
Bigtable доступен (насколько мне известно) только через AppEngine .Другие, подобные технологии перечислены здесь .
Другие мысли
Изображение большего размера выглядит более или менее одинаково независимо от технологии, которую вы решите использовать.Например, разделите хранилище, составные представления, представления кэша, вставьте метаданные куда-нибудь, чтобы вы могли что-то найти.
Характеристики производительности, на которые вы ориентируетесь, потребуют некоторого вида кэширования и / или оптимизации на основе реального использования.узоры.Независимо от выбранного вами решения, вы, вероятно, не сможете решить его на этапе проектирования.