2012-05-01 18 views
10

dağıtmak için en iyi yolu nedir, şu anda her müşteri için postgresql bir şema var, ama müşteriler hızla artması nedeniyle i en iyi çözüm gibi. Cassandra'yı okudum ama birincil, ön plandaki anahtarların ve çeklerin bütünlüğünü kaybetmek istemiyorum. Ayrıca dağıtık sistemlerde postgresql hakkında okumak, ama bu uygulamak için en iyi yolu ne olduğunu bilmiyorum şu andaMüşterilerin yüzlerce hizmet olarak bir yazılım için postgresql bir veritabanı var postgresql

cevap

10

müşterilerinize ayırabilirsiniz hangi dört düzeyi vardır:

  1. için ayrı PostgreSQL küme çalıştırın her müşteri. Bu maksimum ayırma sağlar; Her bir müşteri aynı kümede ayrı veritabanında her müşteri koyun vb sistem tabloları kendi seti, işlem günlüğü,

  2. ayrı port üzerindedir. Bu sayede her birinin ayrı bir girişi vardır, ancak aynı port numarasında pg_database gibi global tabloları paylaşırlar.

  3. her müşteriye aynı veritabanında ayrı şema verin. Bu, yalnızca yazılımınızı kullanarak bağlanıyorlarsa ayrı kullanıcı kimlikleri gerektirmez, çünkü sadece search_path'i ayarlayabilirsiniz. İsterseniz, ayrı kullanıcı kimliklerini de kullanabilirsiniz.

  4. Yap customer_id her tablonun birincil anahtarın parçası ve yazılımınızda Bununla sınırlamak için emin olun. Bu, yüzlerce kullanıcının her biri için yinelenen tablolara sahip olmasından daha iyi olabilir, ancak her zaman sorgularınızı customer_id tarafından onaylamak için çok dikkatli olmalısınız.

Bazı insanlar her müşteri için ayrı bir veritabanı ile 100 veritabanlarına her küme sınırlandırılması, örneğin, bu teknikleri birleştirmek için bilinmektedir.

Daha fazla ayrıntı olmadan, durumunuz için hangi yapılandırmanın en iyi olacağının bilinmesinin zor olduğu durumlar dışında, kullanıcıların veritabanına doğrudan erişmesine izin vermek istiyorsanız, yazılımınızı kullanmadan, görünür durumda olanları düşünmeniz gerektiğini unutmayın. her seçenek ile sistem tablolarında. Nelerin açığa çıktığını görmek için pg_database, pg_user ve pg_class öğelerine kullanıcı perspektifinden bakın.

7

i wanna, birincil, foregin anahtarlar ve kontroller

Cassandra gibi sistemlerin noktası, sizin veri kümesi veya iş yükü bir kez tek bir makinede uymuyor edilir

bütünlüğünü kaybetmemek Postgresql'de kalsanız bile bu şeylerden vazgeçmelisiniz. (Detayları şiddetle tavsiye ettiğim bir konuşmada anlattım: http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2010-what-every-developer-should-know-about-database-scalability-21-3280648).

Cassandra, "Yabancı anahtarlardan ve katılımlardan vazgeçmek zorunda kalacağımızı biliyorsak, veritabanımızı nasıl tasarlayacağımızı yeniden düşünerek ne yapabiliriz?" asla bu noktaya alırsanız

Cassandra overkill. (Ama yine de o konuşmayı izlemelisiniz.)

+0

Konuşmayı sevin! Yukarıdaki bağlantı +1 – Abdo

+0

konuşmaya yol açmaz. Lütfen alakalı bir bağlantı gönderir misiniz? – SahuKahn

+0

@SahuKahn bu ikisini deneyin: * video: http://pyvideo.org/video/313/pycon-2010--what-every-developer-should-know-abou * slaytlar: http: //www.slideshare .net/jbellis/what-every-geliştirici-know-about-about-veritabanı-ölçeklenebilirlik-pycon-2010 –