Muhtemelen SVN ve CVS konusundaki deneyimlerinize dayanarak çok fazla varsayımda bulunmuş gibi görünüyorsunuz.
Git ve Mercurial temelde SVN ve CVS'e benzer
Git ve CVS'i karşılaştırmak, iPad ve Atari karşılaştırmak gibidir. Dinazorlar Dünya'yı dolaştığında CVS geri döndü . Yıkılma temel olarak CVS'nin geliştirilmiş bir versiyonudur. Git ve Mercurial gibi modern versiyon kontrol sistemlerinin onlar gibi çok az anlamlı olduğunu varsayarsak.
İlişkisel bir veritabanı, tek amaçlı bir veritabanından daha verimlidir
Niye ya? İlişkisel veritabanları gerçekten karmaşıktır ve tek amaçlı veritabanları kadar verimli olmayabilir. Başımın üstündeki bazı farklılıklar:
- Versiyon kontrol sistemlerinin karmaşık bir şekilde kilitlenmesi gerekmez, çünkü zaten aynı anda birden fazla işlem yapamazsınız.
- Dağıtılmış sürüm kontrol sistemlerinin çok fazla alan verimli olması gerekir, çünkü yerel veritabanı deponun tam bir kopyasıdır.
- Sürüm kontrol sistemlerinin yalnızca birkaç özel yolla verileri araması gerekir (yazara göre, revizyon kimliğine göre, bazen tam metin araması). Yazar / revizyon ID aramalarını yapabilen kendi veritabanınızı yapmak önemsizdir ve tam metin aramaları, denediğim hiçbir ilişkisel veritabanında çok hızlı değildir.
- Sürüm kontrol sistemlerinin birden fazla platformda çalışması gerekir. Bu, bir servis olarak kurulması ve çalıştırılması gereken bir veritabanının kullanılmasını zorlaştırır (MySQL veya PostgreSQL gibi).
- Yerel makinenizdeki sürüm kontrol sistemlerinin yalnızca bir şey yaparken (bir taahhüt gibi) çalışıyor olması gerekir. Sadece bir taahhütte bulunmak istemeniz durumunda , MySQL gibi bir hizmeti her zaman çalışır durumda bırakmak israf demektir.
- Çoğunlukla, sürüm kontrol sistemleri asla geçmişi silmek istemezler, sadece buna ekleyin. Bu farklı optimizasyonlara ve bütünlüğü korumanın farklı yöntemlerine yol açabilir.
İlişkisel veritabanları daha güvenlidir
Yine neden? Verilerin dosyalarda depolandığından, git ve Mercurial gibi sürüm kontrol sistemlerinin atomik taahhütleri olmadığını varsayıyor gibi görünüyorsunuz . İlişkisel veritabanları ayrıca veritabanlarını dosya olarak saklar. CVS'nin atomik bir taahhütte bulunmaması dikkat çekicidir , ancak bu muhtemelen karanlık çağlardan kaynaklanmaktadır çünkü ilişkisel veritabanları kullanmıyorlar.
Veritabanına girdikten sonra verileri yolsuzluklardan koruma sorunu da var ve yine cevap aynı. Dosya sistemi bozuksa, hangi veritabanını kullandığınız önemli değildir. Dosya sistemi bozuk değilse, veritabanı motorunuz bozulabilir. Sürüm kontrol veritabanının neden buna ilişkisel bir veritabanından daha eğilimli olduğunu anlamıyorum.
Dağıtılmış sürüm kontrol sistemlerinin (git ve Mercurial gibi) veritabanınızı korumak için merkezi sürüm kontrolünden daha iyi olduğunu, çünkü tüm repoyu herhangi bir klondan geri yükleyebileceğinizi iddia ediyorum. Merkezi sunucu kendiliğinden yandığı yüzden, eğer tüm yedeklerini birlikte çalıştırmakta tarafından geri yükleyebilirsiniz git init
sonra yeni sunucuda git push
gelen herhangi geliştiricinin makine .
Tekerleği yeniden icat etmek kötüdür
Eğer sırf edebilirsiniz herhangi bir depolama sorunu için ilişkisel veritabanını kullanmak size anlamına gelmez gerekir . İlişkisel veritabanı yerine neden yapılandırma dosyalarını kullanıyorsunuz? Verileri ilişkisel bir veritabanında saklarken görüntüleri neden dosya sisteminde saklıyorsunuz? Bunları ilişkisel bir veritabanında saklayabiliyorken kodunuzu neden dosya sisteminde tutuyorsunuz?
"Sahip olduğun tek şey bir çekiçse, her şey bir çiviye benziyor."
Açık kaynaklı projelerin, uygun olduğunda, tekerleği yeniden icat etmeyi göze alabilecekleri gerçeği de var, çünkü ticari projelerle aynı türde kaynak kısıtlamalarına sahip değilsiniz. Veritabanları yazma konusunda uzman bir gönüllünüz varsa, neden kullanmıyorsunuz?
Neden olarak, revizyon kontrol sistemlerinin yazarlarına ne yaptıklarını bilmeleri konusunda güveneceğimiz konusunda .. Diğer VCS'ler için konuşamam, ancak Linus Torvalds'ın dosya sistemlerini anladığından eminim .
Neden bazı ticari sürüm kontrol sistemleri o zaman ilişkisel bir veritabanı kullanıyor?
Büyük olasılıkla aşağıdakilerin bir kombinasyonu:
- Bazı geliştiriciler veritabanı yazmak istemiyor .
- Ticari versiyon kontrol sistemlerinin geliştiricileri zaman ve kaynak kısıtlamalarına sahiptir, bu yüzden zaten istediklerine yakın bir şeyleri olduğunda bir veritabanı yazmayı göze alamazlar. Ayrıca, geliştiriciler pahalıdır ve çoğu kişi bu tür bir deneyime sahip olmadığından, veritabanı geliştiricileri (veritabanlarında yazan insanlar gibi) büyük olasılıkla daha pahalıdır.
- Ticari versiyon kontrol sistemlerinin kullanıcılarının zaten bir ilişkisel veritabanı kurmanın ve çalıştırmanın genel giderini umursamadıkları daha azdır.
- Ticari versiyon kontrol sistemlerinin kullanıcılarının, revizyon verilerini destekleyen ilişkisel bir veri tabanı istemeleri daha muhtemeldir , çünkü bu, işlemleriyle daha iyi bütünleşebilir (örneğin yedeklemeler gibi).