Küçük kurumsal müşteriler için web tabanlı Clojure uygulaması olarak bir VB tabanlı şirket içi (yerel olarak yüklü) uygulamayı (faturalama + envanter) yeniden yazmayı düşünüyorum. Bunu benzer ticaretteki müşteriler için bir SaaS uygulaması olarak sunmayı planlıyorum.
Veritabanı seçeneklerine bakıyordum: Seçimim RDBMS: Postgresql / MySQL idi. İlk yıl 400 kullanıcıya kadar ölçeklendirebilirim, genellikle kullanıcı başına günde 20-40 sayfa görüntüleme / çoğunlukla statik görüntüleme olmayan işlemler için. Her görünüm, veri alma ve güncelleme verilerini içerecektir. ASİT uyumluluğu gereklidir (ya da bence). Yani işlem hacmi çok büyük değil.
Bunlardan birini tercihime göre seçmek bir beyinsiz olurdu, ancak SaaS uygulamasının tipik olduğuna inandığım bu bir gereksinim için: Daha fazla müşteri / kullanıcı ve her müşterinin ekledikçe Şema değişecek değişen iş gereksinimi (sadece başlangıç için sınırlı esneklik sunacağım). Ben bir DB uzmanı değilim, ne düşünebilir ve okudum dayalı, ben bunu çeşitli şekillerde başa çıkabilirim:
- Birden çok kiracıyı barındıran tek bir DB ile MySQl / Postgresql'de geleneksel bir RDBMS şema tasarımına sahip olun. Ve daha fazla müşteri veya mevcut bir müşteri için değişiklik eklediğimde, gelecekteki değişikliklere izin vermek için her tabloya yeterli "serbest kayan" sütun ekleyin. Bu, Şemada her küçük değişiklik yapıldığında değişiklikleri DB'ye yaymanın dezavantajı olabilir. Postgresql şema güncellemelerinin kilitlenmeden gerçek zamanlı yapılabileceğini okuduğumu hatırlıyorum. Ancak emin değilim, bu kullanım durumunda ne kadar acı verici veya ne kadar pratiktir. Ayrıca şema değişiklikleri yeni / küçük SQL değişiklikleri de getirebilir.
- RDBMS'ye sahip olun, ancak veritabanı şemasını esnek bir şekilde tasarlayın: varlık-öznitelik değerine yakın veya yalnızca bir anahtar / değer deposu olarak. (Örneğin Workday, FriendFeed)
- Her şeyi nesneler olarak belleğe alın ve bunları günlük dosyalarında düzenli olarak saklayın. (Örneğin, edval, lmax)
- MongoDB veya Redis gibi bir NoSQL DB için gidin. Ama toplayabildiğim şeye dayanarak, bu kullanım durumu için uygun değiller ve tamamen ASİT uyumlu değiller.
- SQL ve ACID uyumlu davranışları koruyan ve "yeni nesil" RDBMS olan VoltDb veya JustoneDb (bulut tabanlı) gibi bazı NewSQL Dbs için gidin.
- Neo4j'ye (graphdb) baktım, ancak bunun bu kullanım durumuna uygun olup olmadığından emin değilim
Benim kullanım durumumda, ölçeklenebilirlik veya dağıtılmış bilgi işlemden daha fazla, "Şema + ACID + esneklik bazı makul Performans" elde etmek için daha iyi bir yol arıyorum. Net üzerinde bulabildiğim makalelerin çoğu, performansa (NoSQL DB'lerde) neden olan şemadaki esneklik ve ACID / İşlemler tarafını terk ederken ölçeklenebilirlikten bahsediyor.
Bu, 'Şema esnekliğine karşı ACID' işlemlerinin "ya da" vakası mıdır, yoksa daha iyi bir çıkış yolu var mı?