2016-04-28 15 views
5

MySQL'ten bir Citus kümesine geçiş sırasında, range dağıtım yöntemini kullandım. Taşıma işlemi tamamlandı, ancak şimdi dağıtım yöntemini hash olarak değiştirmek istiyorum.Varolan bir Citus tablosundaki dağıtım yöntemini değiştirebilir miyim?

Zaten mevcut bir tablo için range - hash arasındaki dağıtım yöntemini değiştirmenin bir yolu var mı?

aşağıdaki yordam ile geldi, ama geçerli olduğundan emin değilim:

  1. Güncelleme tüm kırıkların için pg_dist_shard tablonun minvalue ve maxvalue sütun
  2. Güncelle kırığından depolama türü sütununu değiştirilen h
  3. COMMIT;
için r den pg_dist_partition tablonun

cevap

4

Bu iyi bir soru. Şu anda, Citus mevcut verilerin bölüm tipini değiştirmek için doğrudan bir yol sunmamaktadır. aralık bölümleme olarak

, kayıtları, bölüm sütun değeri ve rastgele min/max değerleri göre kırıkları yerleştirilir. Eğer bir kayıt x shard y'de bulunursa, o zaman y.minvalue <= x.partition_column <= y.maxvalue demektir.

Karma bölümlemede, bölüm sütunu hashlandı ve kayıtlar bu karma değere göre yönlendirilir. Bu nedenle, pg_dist_shard'da gördüğünüz min/max değerleri karma işlevinin sonucu için sınır değerleridir. Bu durumda y.minvalue <= hash(x.partition_column) <= y.maxvalue. Bu nedenle, bahsettiğiniz değişikliklerin yanlış bir dağıtımla sonuçlanacağı anlamına gelir. Aralık bölümünden karma bölümlere geçmek için, veriler yeniden dağıtılmalıdır. Bunu yapmak için, verileri boş bir karma bölümlenmiş tabloya yeniden yüklemenizi öneririm.

fazla bilgi için, Citus Belgeleri Working with Distributed Tables ve Hash Distribution bölümlere başvurabilir.

+0

ben aynı MINVALUE olması shard tabloları güncellemek eğer planlayıcısı her kırığa yol sorgusu olacak böylece 'karma (x.partition_column)' her bir kırığı vuracak çünkü/maxvalue her şey iyi çalışır teyit edebilir. –

+0

Yeniden yükleme verileri geçerli değil. Birkaç gün sürecek ... Situs meta verilerinin planlayıcı tarafından nasıl kullanıldığı hakkında bir DOC görmekten mutluluk duyacağım. –

+1

En düşük değerin INT_MIN değerine ayarlanması ve her bir piste maksimum INT_MAX değerinin olması güzel bir bahis olur. SELECT sorgularında çalışır, ancak daha yavaş olurdu, çünkü sert budama yapılmayacaktır. Ancak, değişiklik sorguları (INSERT, UPDATE, DELETE), her sorguda bir isabetli isabet aldıklarından işe yaramaz. Sadece Citus'un çalışması için bu çözümün pozitif olacağını, ancak performans karşılaştırmaları ya da üretimi için kesinlikle sıfırdan veri yüklemeyi öneririm. –

İlgili konular