Фон
Я использую Datomic для хранения проекций событий, сгенерированных другими системами (проекции в этом случае можно рассматривать как сущность в Datomic). Эти события имеют связанную с ними отметку времени, которая сообщает, когда событие было (например) создано. Очевидно, что это не то же самое, что время транзакции, которое Datomic назначит транзакции при сохранении нового атрибута (на основе события) в проекции. Пользователей моего приложения интересует не время транзакции, а время события. Причина, по которой я использую Datomic, в первую очередь заключается в том, чтобы иметь возможность получить сущность (или запросить базу данных) в определенное время. Однако это время должно быть не временем транзакции Datomic, а скорее временем события. Например, я хочу получить объект на основе этого времени события:
(datomic/entity (datomic/as-of db event-time) id)
Возможное решение
Одна идея, о которой я думаю, состоит в том, чтобы установить :db/txInstant
для каждой транзакции на время события, но мне посоветовали не сделать это как общий принцип. Другая потенциальная проблема заключается в том, что вы не можете назначить :db/txInstant
старше схемы (что будет иметь место в моем приложении). Решением этой проблемы было бы установить действительно раннее :db/txInstant
для транзакции, создающей схему.
Вопрос
Как в Datomic обычно обрабатывают время события, а не время транзакции? Как работает «возможное решение»?