2014-07-09 15 views

cevap

12

Datomic'in tasarımında zaman önemlidir. Datomic'in zamana ilişkin görüşünün bir parçası, varlıkların tablolara eklendiği ve yeni gerçeklerin satırdaki eski gerçeklerin üzerine yazıldığı geleneksel bir CRUD veritabanında olduğu gibi varlıkların oluşturulmadığı veya güncellenmediği. Bunun yerine, varlıklar hakkındaki gerçekler zaman içinde ileri sürülür ve geri çekilir. Bu değişmez tarih göz önüne alındığında, Datomic onun şu anki haliyle nasıl olması gerektiğini biliyor. Sen zamanla geçmiş veritabanı verilerinizin yapısı hakkında o bilgi toplayabilir:

http://docs.datomic.com/clojure/#datomic.api/history

Yani at-eklenip güncellenmektedir-at, sen Datomic en güvenebilirsiniz ilgili soruya cevap yerleşik zaman bilinci . Şeyler oluşturulduğunda sorgulamak için - burada iki seçenek vardır. şema çeşit benzersiz bir tanımlayıcı içeriyorsa, (varlık ilk eklendiğinde, bir kez olmalı) bu özellik oluşturulduğu işlem başvurmak için Sorgunuzla kısıtlayabilir:

(d/q '[:find ?e ?tx-time 
     :where 
     [?e :user/id _ ?tx] 
     [?tx :db/txInstant ?tx-time]] 
    db) 

Eğer yapabiliyorsanız' bu şekilde daha yavaş olacaktır

(d/q ':find ?e (min ?tx-time) 
     :in $ ?e 
     :where 
     [?e _ _ ?tx _] 
     [?tx :db/txInstant ?tx-time] 
    (history db) entity-id) 

Not olduğunu, ancak: t başlatma sırasında bir özelliğin güvenmek, böyle bu parametreli sorguda gibi bir varlığa karşılık gelen tüm işlemler için minimum süreyi almak için bir tarih veritabanını kullanabilirsiniz potansiyel olarak daha sağlam. En son gerçeği ("güncelleme") istediyseniz, min için max altını kullanabilirsiniz.

+0

Cevabınız için teşekkürler, ancak bu şekilde yapmak zor bulundu. Bu performans mı? Özellikle "güncelleme" zamanını bulmak durumunda? "Yarattığınız" ve "güncelle-at" bir özellik oluşturmak ya da atmak ister misiniz? Sipariş oluşturma süresine göre sipariş vermek istersem, bu kolay mı? Ve neden ilk ifadede "(history db)" kullanmadınız? Anlamadım. Çok teşekkür ederim. –

+0

Bu özniteliklerin tanımlanması için gereksiz ve biraz ters etkilidir * * Datomic'in dışındaki bir zaman boyutuna karşılık gelmedikçe (Datomic gerçekler hakkındaki iddialar için günlüğe sahip olan zamanlar). Datomic'in günlük dizini (bkz. Log API http://docs.datomic.com/log.html), bu tür işlem süresi tabanlı sorgular için optimize edilmiştir. –

+0

Ayrıca, pro-bölüm bölümünü datomik yardımdan da bulabilirsiniz: https://github.com/Datomic/day-of-datomic/blob/master/tutorial/provenance.clj –

İlgili konular