benim 2 pence değerim. Biraz özlem ama ...... kuluçka projelerimden birinde benzer bir ihtiyacım vardı. Sizinkine benzer şekilde, benim temel gereksinimlerim, burada bir belge veritabanı (benim durumumda xml), belge sürümleme ile. Çok sayıda işbirliği kullanım durumu olan çok kullanıcılı bir sistem içindi. Tercihim, temel gereksinimlerin çoğunu destekleyen mevcut açık kaynaklı çözümleri kullanmaktı.
Kısacası, her ikisini de yeterince ölçeklenebilir bir şekilde (kullanıcı sayısı, kullanım hacimleri, depolama ve bilgi işlem kaynakları) sağlayan tek bir ürün bulamadım. Tüm umut vaat eden yetenekler için git'e önyargılıydım ve (olası) bunlardan çıkarılabilecek çözümler. Git seçeneğini daha fazla oynadıkça, tek kullanıcı perspektifinden çoklu (milli) kullanıcı perspektifine geçmek bariz bir zorluk haline geldi. Maalesef, sizin yaptığınız gibi önemli bir performans analizi yapamadım. (.. tembel / erken çıkın .... sürüm 2 için, mantra) Güç size !. Her neyse, önyargılı fikrim o zamandan beri bir sonraki (hala önyargılı) alternatife dönüştü: kendi ayrı alanlarında, veritabanlarında ve sürüm kontrolünde en iyi olan araçların bir araya getirilmesi.
Hala devam etmekte olan (... ve biraz ihmal edilmiş) olsa da, biçimlendirilmiş sürüm basitçe budur.
- ön uçta: (kullanıcı yüzü) 1. seviye depolama için bir veritabanı kullanın (kullanıcı uygulamalarıyla arayüz oluşturma)
- arka uçta, veritabanındaki veri nesnelerinin sürümlerini oluşturmak için bir sürüm kontrol sistemi (VCS) (git gibi) kullanın
Temelde bu, geliştirmeniz gerekebilecek, ancak çok daha kolay olabilecek bazı entegrasyon yapıştırıcısı ile veritabanına bir sürüm kontrol eklentisi eklemek anlamına gelir.
Nasıl çalışacağı (beklendiği), birincil çok kullanıcılı arayüz veri alışverişlerinin veri tabanı üzerinden gerçekleşmesidir. DBMS, çoklu kullanıcı, eşzamanlılık e, atomik işlemler vb. Gibi tüm eğlenceli ve karmaşık konuları ele alacaktır. Arka uçta VCS, tek bir veri nesnesi kümesi üzerinde sürüm kontrolü gerçekleştirecektir (eşzamanlılık veya çoklu kullanıcı sorunları). Veritabanındaki her etkin işlem için sürüm kontrolü yalnızca etkin bir şekilde değişmiş olacak veri kayıtları üzerinde gerçekleştirilir.
Arayüz yapıştırıcıya gelince, veritabanı ve VCS arasında basit bir birlikte çalışma işlevi biçiminde olacaktır. Tasarım açısından, basit yaklaşım, veritabanından veri güncellemelerinin sürüm kontrol prosedürlerini tetiklediği olay güdümlü bir arayüz olacaktır (ipucu: Mysql varsayımı , tetikleyicilerin kullanımı ve sys_exec () blah blah ...). Uygulama karmaşıklığı açısından, basit ve etkili (örneğin komut dosyası oluşturma) karmaşık ve harika (bazı programlanmış bağlayıcı arayüzleri) arasında değişecektir. Her şey, onunla ne kadar çılgınca gitmek istediğinize ve ne kadar ter sermaye harcamak istediğinize bağlıdır. Bence basit komut dosyası sihri yapmalı. Ve nihai sonuca, çeşitli veri sürümlerine erişmek için basit bir alternatif, veritabanının bir klonunu (daha çok veri tabanı yapısının bir klonu) VCS'de sürüm etiketi / id / karma ile referans verilen verilerle doldurmaktır. yine bu bit, bir arayüzün basit bir sorgulama / çeviri / eşleme işi olacaktır.
Hala ele alınması gereken bazı zorluklar ve bilinmeyenler var, ancak bunların çoğunun etkisi ve alaka düzeyinin büyük ölçüde uygulama gereksinimlerinize ve kullanım örneklerinize bağlı olacağını düşünüyorum. Bazıları problemsiz hale gelebilir. Sorunlardan bazıları, yüksek frekanslı veri güncelleme etkinliğine sahip bir uygulama için 2 temel modül, veritabanı ve VCS arasındaki performans eşleştirmesini, veri olarak git tarafında kaynakların zaman içinde ölçeklendirilmesini (depolama ve işleme gücü) ve kullanıcıları içerir. büyüme: sabit, üstel veya nihayetinde platolar
Yukarıdaki kokteylin, şu anda hazırladığım şey
- VCS için Git kullanmak (başlangıçta 2 sürüm arasında yalnızca değişiklik kümelerinin veya deltaların kullanılması nedeniyle eski güzel CVS olarak kabul edilir)
- mysql kullanma (verilerimin oldukça yapılandırılmış doğası nedeniyle, katı xml şemalarına sahip xml)
- MongoDB ile uğraşmak (git'te kullanılan yerel veritabanı yapısıyla yakından eşleşen bir NoSQl veritabanını denemek için)
Bazı eğlenceli gerçekler - git, sıkıştırmayı ve nesnelerin revizyonları arasında yalnızca deltaların depolanması gibi depolamayı optimize etmek için aslında net şeyler yapar - EVET, git, uygulanabilir olduğunda, veri nesnelerinin revizyonları arasında yalnızca değişiklik kümelerini veya deltaları saklar (bilir ne zaman ve nasıl) . Referans: Git'in iç kısımlarının derinliklerinde bulunan packfiles - Git'in
nesne depolamasının (içerik-adreslenebilir dosya sistemi) incelemesi, mongoDB gibi noSQL veritabanları ile (kavram açısından) şaşırtıcı benzerlikler göstermektedir. Yine, ter sermayesi pahasına, 2'yi ve performans ayarlamasını entegre etmek için daha ilginç olanaklar sağlayabilir.
Buraya kadar geldiyseniz, yukarıdakilerin sizin durumunuz için geçerli olup olmadığını ve olacağını varsayarsak, son kapsamlı performans analizinizdeki bazı yönleri nasıl karşılayacağını bana bildirin.