Benim soru birine bu yorumdan sonra , X şemaları ile bir veritabanı kullanarak daha iyi olup olmadığını düşünüyorum ya da tam tersi.
Benim durumum: İnsanlar kaydolduğunda, bir veritabanı (aslında) oluşturduğum bir web uygulaması geliştiriyorum (hayır, bu bir sosyal ağ değil: herkes kendi verilerine erişmeli ve diğer kullanıcının verilerini asla görmemelidir) .
Uygulamamın önceki sürümü için kullandığım yol budur (hala MySQL'de çalışıyor): Plesk API'sı aracılığıyla, her kayıt için şunu yapıyorum:
- Sınırlı ayrıcalıklara sahip bir veritabanı kullanıcısı oluşturun;
- Yalnızca önceki oluşturulan kullanıcı ve süper kullanıcı tarafından erişilebilen bir veritabanı oluşturun (bakım için)
- Veritabanını doldurma
Şimdi, PostgreSQL ile aynı şeyi yapmam gerekecek (proje olgunlaşıyor ve MySQL ... tüm ihtiyaçları karşılamıyor).
Tüm veritabanları / şema yedekleri bağımsız olması gerekir: pg_dump her iki şekilde mükemmel çalışır ve aynı sadece bir şema veya bir veritabanına erişmek için yapılandırılabilir kullanıcılar için.
Peki, benden daha deneyimli PostgreSQL kullanıcıları olduğunuzu varsayarsak, durumum için en iyi çözüm nedir ve neden?
$ X şemaları yerine $ x veritabanı kullanıldığında performans farklılıkları olacak mı? Ve gelecekte hangi çözümü korumak daha iyi olacaktır (güvenilirlik)?
Tüm veritabanlarım / şemalarım her zaman aynı yapıya sahip olacak !
Yedekleme sorunu için (pg_dump kullanarak), belki bir veritabanı ve birçok şema kullanmak daha iyidir, tüm şemaları aynı anda boşaltır: kurtarma, bir geliştirme makinesine ana dökümü yüklemek ve daha sonra sadece gerekli şemayı dökmek ve geri yüklemek için oldukça basit olacaktır: ek bir adımdır, ancak tüm şemayı boşaltmak, onları tek tek dökmekten daha hızlı görünür.
GÜNCELLEME 2012
Son iki yılda uygulama yapısı ve tasarımı çok değişti. Hala one db with many schemas
yaklaşımı kullanıyorum , ama yine de, benim uygulama her sürümü için bir veritabanı var :
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Yedeklemeler için, her bir veritabanını düzenli olarak döküyorum ve yedeklemeleri geliştirme sunucusunda taşıyorum.
Ayrıca PITR / WAL yedeğini kullanıyorum, ancak daha önce de söylediğim gibi, muhtemelen tüm veritabanını bir kerede geri yüklemek zorunda kalacağım ... bu yüzden muhtemelen bu yıl reddedilecek (benim durumumda en iyi yaklaşım değil) ).
One-db-many-schema yaklaşımı, uygulama yapısı tamamen değişmiş olsa bile, o zamandan beri benim için çok iyi çalıştı:
Neredeyse unuttum: tüm veritabanlarım / şemalarım her zaman aynı yapıya sahip olacak !
... şimdi, her şemanın kullanıcı veri akışına dinamik olarak tepki veren kendi yapısı vardır.