Существуют ли какие-либо шаблоны проектирования для bitemporal баз данных NoSQL?
Мне любопытно, если кто-либо реализовал или даже знает какие-либо bitemporal базы данных, созданные на платформах NoSQL (например, riak).
Ответы
Ответ 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 для фактического хранилища данных. См. Описание этого здесь.