Подтвердить что ты не робот

Существуют ли какие-либо шаблоны проектирования для bitemporal баз данных NoSQL?

Мне любопытно, если кто-либо реализовал или даже знает какие-либо bitemporal базы данных, созданные на платформах NoSQL (например, riak).

4b9b3361

Ответ 1

Я не знаю ни одного хранилища данных NoSQL, которые специально предназначены для обработки временных данных. Чтобы поместить действительные и периоды времени транзакции на данные в Riak, вам необходимо либо:

  • Оберните свои документы/значения структурой, которая может хранить метаданные, например:

    { мета:{   valid: [ "2001-11-08", "2001-11-09" ],   сделка: [ "2011-01-29 10:27:00", "2011-01-29 10:28:00" ] } Полезная нагрузка: "Это фактический документ/значение, которое я хочу сохранить!" }

  • Создайте "мета-документ" для каждого документа и используйте Riak Links, чтобы связать их. Я думаю, что это немного чище, но если вам нужно часто извлекать эти моменты, этот метод может быть слишком медленным.

Если вы хотите получить документы по времени, я не думаю, что Riak (или любые другие данные/данные, которые я знаю) будет правильным хранилищем данных. SQL или, возможно, какая-то система BigTable может быть вашим единственным хорошим вариантом.

Ответ 2

Я написал небольшой bitemporal слой с открытым исходным кодом на основе Mongodb:

https://github.com/1123/bitemporaldb

При хранении объектов Scala или Java объект обертывается в общий битмпоральный объект с битмпоральной метаинформацией (действительное время, время транзакции). Впоследствии он сериализуется в json и сохраняется как BSON в MongoDB.

Он прозрачно обрабатывает временные и невременные обновления объектов. Возможно поиск по битмпоральному контексту.

Документированные базы данных для битпоральных данных являются полезными, поскольку хранилище, ориентированное на документы, уменьшает количество объединений для извлечения данных. Объединение в bitemporal контекст может быть неэффективным и трудно скопировать вручную.

Обратная связь, вклад и запросы функций очень приветствуются.

Ответ 3

Из Википедии:

"Bitemporal data - это понятие, используемое во временной базе данных. Оно обозначает как действительное время, так и время транзакции данных. В таблице базы данных битпоральные данные часто представлены четырьмя дополнительными столбцами таблицы StartVT и EndVT, StartTT и EndTT. Каждый временной интервал закрывается на нижней границе и открывается на верхней границе.

Значит, вы не можете просто поместить эти четыре значения в свои данные?

Ответ 4

Чтобы поддерживать bitemporal (или временную db-модель), вам нужны кислотные транзакции для выполнения надлежащего DML для обновления и вставки записей в два временных измерения (действительное/эффективное время и транзакционное/системное время). Подробнее см. о временном моделировании.

В популярной базе данных NoSQL, например Cassandra, MongoDB, Couchbase, нет поддержки ACID для выполнения необходимых операций обновления/вставки записей, необходимых для поддержки обработки битпопоральной записи. Поскольку временные и битемпоральные записи баз данных никогда не должны перекрываться, и записи должны быть надлежащим образом завершены, если они заменены последующими действительными/транзакционными записями.

База данных MarkLogic NoSQL требует поддержки bitemporal, но никогда не пробовала и не является открытым исходным кодом. Но вы можете сворачивать свое собственное решение, используя базу данных ACID, которая эффективно функционирует как журнал проверки достоверности/транзакций, а затем использует NoSQL для фактического хранилища данных. См. Описание этого здесь.