SORU
27 NİSAN 2012, Cuma


Datomic veri modelleme

Datomic, araştırıyorum ve gerçekten ilginç görünüyor. Ama very good information on how Datomic works technically gibi görünüyor olsa da, bir veri modelleme düşünmem gerektiği hakkında pek görmedim.

Ne Datomic veri modelleme için bazı en iyi uygulamaları? Konuyla ilgili herhangi bir iyi kaynaklar var mı?

CEVAP
13 Mayıs 2012, Pazar


Uyarı Okuyucu

Datomic yeni ve benim deneyim kısıtlı olduğundan, bu cevap en iyi uygulamalar hiçbir şekilde kabul edilmemelidir. Bunun yerine ilişkisel bir arka plan olanlar için Datomic için bir intro ve daha verimli bir veri deposu için bir hasret gibi.

Başlarken

Datomic, etki alanı veri modeliVarlıklarıo sahipDeğerleriçinÖznitelikleri. Başka bir referans çünküVarlıkolabilirDeğerbirÖznitelikmodelİlişkilerarasındaVarlıklarısadece.

İlk bakışta, bu veriler geleneksel ilişkisel bir veritabanı modellenmiş şeklinden çok farklı değil. SQL içinde, tablo satırlarıVarlıklarıve tablonun sütun adıÖzniteliklerio varDeğerler. Birİlişkiyabancı bir anahtar tarafından temsil edilmektedirDeğerbir tablo satırı birincil anahtarına başvuranDeğerbir tablo satır.

Bu benzerlik sadece etki alanı modelleme geleneksel ER diyagramlar çizmek, çünkü güzel. Bir SQL veritabanı gibi ilişkiler güvenebilirsiniz, ama bu senin için işlenmiş yılından bu yana yaklaşık yabancı anahtarları karıştırmaya gerek yok. Yazar işlem ve tutarlı olduğunu okur. Her ayrıntı doğru tarafa verilerinizi ayrı, güvenerek büyük resmi sunmak için birleştirir. Ortak BÜYÜK, normal dışı varlıkları güncellemeleri sırasında atom oranı bazı yararlı seviyesine ulaşmak için var olduğu pek çok NoSQL mağazaları, kaybettiğiniz bir kolaylık.

Bu noktada, iyi bir başlangıç yapmışsınız demektir. Ama Datomic bir SQL veritabanı çok daha esnek.

Yararlanarak

Zaman doğal olarak tüm Datomic veri parçası, veri modelinin bir parçası olarak, özellikle veri geçmişi vardır gerek yok. Bu muhtemelen en Datomic yönü hakkında konuştuk.

Datomic, şema katı "dikdörtgen şeklinde" SQL. tarafından gerekli tanımlanmamış O, bir varlık[1] modeli karşılamak için gereken her şeye sahip olabilir. Bir varlık NULL veya bunun için geçerli değil bu öznitelikler için varsayılan değer olması gerekmez. Ve uygun gördüğünüz gibi belirli, tek bir varlık öznitelikleri ekleyebilirsiniz.

Zaman içinde tek tek varlıkları şekline etki değişiklikler (veya etki alanı anlayışınız için değişiklikler) karşılık vermek için değiştirebilirsiniz. Ne olmuş yani? Bu MongoDB ve CouchDB gibi Belge Depoları farklı değil.

Fark Datomic ile atomik etkilenen tüm varlıklar üzerinde şema değişiklikleri yürürlüğe koymak olabilir. Tüm varlıklar şekli güncelleştirmek için bir işlem sorun olabilir yanirasgele etki mantığa dayalı,senin dilinde yazılmış[2], Bu kadar kararlı okuyucular etkilemeden yürütülür. Bir şey ya da ilişkisel veya belge deposu alanlarda güç bu tür yakın farkında değilim.

Sizin varlıklar katı "tek bir tablo içinde yaşayan" de. olarak tanımlanmamış ""Datomic. bir varlık türü tanımlayan karar Açık olmayı tercih edebilirler ve modeli her varlık, ne akla o :table bir öznitelik olacak manda "yazın". Veya varlıklar "tip" sadece öznitelik tatmin edici her tür gereksinimleri. herhangi bir sayı için uygun olabilir

Örneğin, sizin model görev:

  • Bir Kişi:name, :ssn, :dob nitelikler gerektirir
  • Bir Çalışan*, *, ***7 6 8* gerektirir
  • İkamet:name, :address gerektirir
  • Üye:id, 12*, :expiration *gerektirir

Benim gibi bir varlık anlamına gelir

{:name "Brian" :ssn 123-45-6789 :dob 1976-09-15 
 :address "400 South State St, Chicago, IL 60605"
 :id 42 :plan "Basic" :expiration 2012-05-01}

Person Resident . bir olayla olabilir ^strong>ve17**ama DEĞİL18**.

Datomic sorgular Datalog ifade ve kuralları kendi dilinde ifade edilen referans verileri ve Datomic içinde saklı olmayan kaynaklar dahil edebilirsiniz. SaklayabilirsinizVeritabanı Fonksiyonlarıbirinci sınıf Datomic içinde değerleri. Bu SQL Saklı Yordamları benzer, ama bir hareketin içinde değerleri ve aynı zamanda dili ile yazılmış olarak kullanılabilirler. Bu özelliklerin her ikisi de sorgular ve güncellemeler ifade etki alanı merkezli daha fazla.

Son olarak, nesne yönelimli ve ilişkisel dünyalar arasında impedance mismatch beni hep sinir ederdi. Veri merkezli bir dil işlevsel (Clojure) kullanarak bu yardımcı olur, ama Datomic zihinsel jimnastik depolama için kod köprüyü gerektirmeyecek kalıcı bir veri deposu sağlamak için görünüyor.

Örnek olarak, bir varlık Datomic görünüyor getirilen ve (ya da Java) Clojure bir harita gibi davranıyor. Nesne örneği veya genel veri yapısı içine bir çevirisi olmayan bir uygulamanın daha yüksek seviyelere kadar geçti olabilir. Bu varlık ilişkileri geçme Datomic ilgili varlıklar tembel almak olacaktır. Ama özgün Sorgu ile tutarlıdır olacağı garanti olan, hatta eşzamanlı güncellemeler karşısında. Ve bu varlıklar eski haritalar ilk varlık içinde yuvalanmış düz olarak görünür.

Bu veri modelleme daha doğal ve çok, benim görüşüme göre, bir kavga daha az yapar.

Potansiyel Tuzaklar

  • Öznitelikleri çelişkili

    Yukarıdaki örnek model içinde potansiyel bir hatadır göstermektedir. Eğer :id Employee bir özniteliği olduğunu daha sonra karar verirsem ne olur? Çözüm içine niteliklerini düzenlemektirad. :member/id :employee/id Her ikisi de olurdu. Önceden bunu çatışma daha sonra önlemek yardımcı olur.

  • Bir öznitelik tanımını değiştirdi (henüz) olamaz

    Belirli bir türü, dövize endeksli ya da değil, vb benzersiz olarak Datomic bir öznitelik tanımladıktan sonra. bunu daha sonra değiştirebilirsiniz. SQL dilinde ALTER TABLE ALTER COLUMN burada konuşuyoruz. Şimdi, tam anlamı ile bir yedek öznitelik oluşturmak ve varolan verilerinizi taşıyabilirsiniz.

    Bu korkunç gelebilir ama değil. İşlemleri sıralanmış çünkü, yeni bir öznitelik oluşturur, verileri kopyalar, çatışmaların çözümlenmesi ve eski özniteliğini kaldırır birini gönderebilirsiniz. Diğer işlemler müdahalesi olmadan çalışır ve bu işi yapmak için, kendi dillerinde etki alanına özgü mantık yararlanabilirsiniz. Bir VERİTABANI yönetim sistemi ALTER TABLE, bir sorun ne zaman perde arkasında ne yaptığını aslında ama kuralları adı.

  • Olma "şeker dükkanındaki bir çocuk"

    Esnek şema veri modeli anlamına gelmez. Bazı açık aklı başında bir şekilde, aynı model başka bir veri deposu için planlama tavsiye ederim. Kaldıraç Datomic esnekliği size yoldagerekçünkü , değil sadece.

  • Sürekli değişen, büyük veri depolama önlemek

    Datomic sürekli değişen Lekeler ya da çok büyük veri için iyi bir veri depolamak değil. Önceki değerleri tarihsel bir kaydını tutar ve eski sürümleri (henüz) temizlemek için bir yöntem yok çünkü. Böyle bir şey neredeyse her zaman S3 gibi bir nesne saklamak için daha uygundur.

Kaynaklar

Notlar

  1. Satır mantıklı, daha düzgün bir varlık türü olarak tanımlanan tablo anlamında değil, varlık.
  2. Benim anladığım Java ve Clojure şu anda desteklenen, ama diğer JVM dilleri gelecekte desteklenmesi olanaklıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BlackmillMusic

    BlackmillMus

    3 Kasım 2010
  • Peyton

    Peyton

    28 Aralık 2008
  • The Exploiteers

    The Exploite

    4 Ocak 2011