Voglio sapere per es. quando un'entità è stata creata o aggiornata. Devo creare un attributo come :created-at
e :update-at
o Datomic ha questi attributi per impostazione predefinita? O qualche modo per scoprire quando un'entità è stata creata o aggiornata?Ha entità nei metadati Datomic come la creazione e il tempo di aggiornamento?
risposta
Il tempo è fondamentale per il design di Datomic. Parte della visione del tempo di Datomic è che le entità non vengono create o aggiornate come in un database CRUD tradizionale in cui le righe vengono inserite nelle tabelle e nuovi fatti sovrascrivono i fatti precedenti nella riga. Invece, i fatti sulle entità sono affermati e ritrattati nel tempo. Data questa storia immutabile, Datomic sa come deve essere nel suo stato attuale. È possibile raccogliere queste informazioni sulla struttura dei vostri dati nel tempo il database della cronologia:
http://docs.datomic.com/clojure/#datomic.api/history
Quindi per rispondere alla tua domanda su aggiunto-a e aggiornato-in, si può contare su Datomic di built-in di sensibilizzazione tempo . Per interrogare su quando sono state create le cose - qui ci sono due opzioni. Se lo schema include un identificatore univoco di qualche tipo, è possibile vincolare la query per fare riferimento alla transazione quando questo attributo è stato creato (dovrebbe essere una volta, quando l'entità è stato aggiunto prima):
(d/q '[:find ?e ?tx-time
:where
[?e :user/id _ ?tx]
[?tx :db/txInstant ?tx-time]]
db)
Se si puo' t si basano su un attributo in fase di inizializzazione, è possibile utilizzare un database della cronologia di prendere il tempo minimo per tutte le transazioni corrispondenti ad un'entità, come ad esempio in questa query con parametri:
(d/q ':find ?e (min ?tx-time)
:in $ ?e
:where
[?e _ _ ?tx _]
[?tx :db/txInstant ?tx-time]
(history db) entity-id)
si noti che in questo modo sarà più lento, ma potenzialmente più robusto. Se si desiderava l'ultimo fatto affermato ("aggiornamento"), è possibile sub max
per min
.
- 1. relazioni qualificate in datomic
- 2. Symfony2 Aggiornamento entità modulo
- 3. HWND Tempo di creazione
- 4. Entità di aggiornamento EF4 senza prima entità di acquisizione
- 5. Come posso evitare la creazione di entità superflue?
- 6. Strutture di nidificazione con Datomic
- 7. Aggiunta e aggiornamento di entità con Entity Framework
- 8. Ottenere l'ID di un'entità inserita in datomic?
- 9. Creazione di entità OData POST con espansione
- 10. Datomic - funziona con la clausola OR
- 11. Recupera l'entità più recente da Datomic
- 12. Creazione o aggiornamento Sequenza
- 13. Aggiornamento di eclissi che impiega troppo tempo
- 14. Creazione e aggiornamento degli indici Zend_Search_Lucene
- 15. Codice framework entità prima - come eseguire il database di aggiornamento per il database di produzione
- 16. Parametri query in Datomic
- 17. Tempo di utilizzo trascorso come asserzione nei test di unità
- 18. PostgreSQL: tempo di creazione tabella
- 19. Jprofiler 7.2.2 - Come visualizzare il tempo trascorso nei metodi
- 20. OSX - Come ottenere il tempo di creazione e modifica di un file dalla riga di comando
- 21. Aggiornamento avanzamento nei cicli Parallel.For()
- 22. deadlock di aggiornamento dei metadati (spring-security-saml)
- 23. Come mostrare la percentuale fatta, il tempo trascorso e il tempo stimato di avanzamento?
- 24. Dovremmo inserire classi, enumerazioni e altre entità nei propri file?
- 25. EF7 Come gestire l'operazione di aggiornamento per entità nidificate
- 26. gestore di entità non ha il metodo getCriteriaBuilder()
- 27. Impostazione tempo di aggiornamento file Webstorm/PHPStorm
- 28. Perché creazione processo Erlang e il messaggio che passa il tempo meno di Java e C#
- 29. Come distinguere tra il tempo di vivere e il tempo al minimo in EHCache
- 30. Aggiornamento entità modello nucleo dati e sottoclasse NSManagedobject backed
grazie per la risposta, tuttavia ho trovato difficile fare in questo modo. È così performante? Specialmente nel caso di trovare il tempo di "aggiornamento"? Pensi che sia giusto creare un attributo "creato-a" e "aggiornamento-at" o sarebbe uno spreco? Se voglio ordinare per tempo di creazione, ad esempio, è così facile? E perché non hai usato "(storia db)" nella prima affermazione? Non l'ho capito Grazie mille. –
Non è necessario e in qualche modo controproducente definire questi attributi * a meno che * non corrispondano a una dimensione temporale esterna a Datomic (Datomic che ha registrato i tempi per le asserzioni sui fatti). L'indice di registro di Datomic (consultare l'API Log http://docs.datomic.com/log.html) è ottimizzato per questi tipi di query basate sul tempo di transazione. –
Puoi anche trovare la sezione di provenienza dal giorno del datomico utile: https://github.com/Datomic/day-of-datomic/blob/master/tutorial/provenance.clj –