5

मुझे डेटा की मात्रा के कारण हमारे एप्लिकेशन डीबी को स्केल करने की आवश्यकता है। यह PostgreSQL 9.3 पर है। इसलिए, मुझे PostgreSQL-XL मिला है और यह बहुत अच्छा लग रहा है, लेकिन मुझे वितरित टेबल के लिए सीमाओं के चारों ओर अपने सिर को लपेटने का प्रयास करने में कठिनाई हो रही है। उन्हें प्रतिकृति (जहां पूरे तालिका हर datanode में दोहराया जाता है) काफी ठीक है द्वारा वितरित करने के लिए है, लेकिन मान लीजिए कि मैं दो बड़े संबंधित टेबल datanodes साथ "sharded" होने की जरूरत है कि डालते हैं:पोस्टग्रेस्क्ल से पोस्टग्रेस-एक्सएल तक माइग्रेट करना: वितरित टेबल डिज़ाइन

CREATE TABLE foos 
(
    id bigserial NOT NULL, 
    project_id integer NOT NULL, 
    template_id integer NOT NULL, 
    batch_id integer, 
    dataset_id integer NOT NULL, 
    name text NOT NULL, 
    CONSTRAINT pk_foos PRIMARY KEY (id), 
    CONSTRAINT fk_foos_batch_id FOREIGN KEY (batch_id) 
     REFERENCES batches (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE CASCADE, 
    CONSTRAINT fk_foos_dataset_id FOREIGN KEY (dataset_id) 
     REFERENCES datasets (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE CASCADE, 
    CONSTRAINT fk_foos_project_id FOREIGN KEY (project_id) 
     REFERENCES projects (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE CASCADE, 
    CONSTRAINT fk_foos_template_id FOREIGN KEY (template_id) 
     REFERENCES templates (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE CASCADE, 
    CONSTRAINT uc_foos UNIQUE (project_id, name) 
); 

CREATE TABLE foo_childs 
(
    id bigserial NOT NULL, 
    foo_id bigint NOT NULL, 
    template_id integer NOT NULL, 
    batch_id integer, 
    ffdata hstore, 
    CONSTRAINT pk_ff_foos PRIMARY KEY (id), 
    CONSTRAINT fk_fffoos_batch_id FOREIGN KEY (batch_id) 
     REFERENCES batches (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE CASCADE, 
    CONSTRAINT fk_fffoos_foo_id FOREIGN KEY (foo_id) 
     REFERENCES foos (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE CASCADE, 
    CONSTRAINT fk_fffoos_template_id FOREIGN KEY (template_id) 
     REFERENCES templates (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE CASCADE 
); 

अब postgres-XL प्रलेखन कहा गया है कि:

  • "(...) वितरित तालिकाओं में, अद्वितीय की कमी तालिका के वितरण स्तंभ शामिल करना चाहिए"
  • "(...) वितरण स्तंभ शामिल किया जाना चाहिए प्राथमिक कुंजी में "
  • "(...) रेफरेंस (एफके) के साथ कॉलम वितरण कॉलम होना चाहिए। (...) प्राथमिक कुंजी वितरण स्तंभ के रूप में अच्छी तरह से होना चाहिए। "

उनके उदाहरण सरलीकृत और scarse अधिक कर रहे हैं, तो कोई मुझे प्रयोग करने के लिए postgres-XL दो ऊपर टेबल DDL HASH द्वारा वितरित कृपया कर सकते हैं()?

या हो सकता है किसी भी शामिल होने पर foos.id = foos_child.foo_id भेजा जा सकता है और स्थानीय स्तर पर किया बाहर पैमाने पर करने के अन्य तरीकों का सुझाव?

उत्तर

0
CREATE TABLE foos 
(...) DISTRIBUTE BY HASH(id); 

CREATE TABLE foos_child 
(...) DISTRIBUTE BY HASH(foo_id); 

अब।

+0

त्वरित उत्तर के लिए धन्यवाद लेकिन मैंने पहले कोशिश की थी, यह वास्तव में पहली चीज थी, बिना किसी किस्मत के। मुझे यह त्रुटि पहली तालिका बनाने की कोशिश कर रही है: 'त्रुटि: विभाजित तालिका के अद्वितीय अनुक्रमणिका में हैश वितरण कॉलम होना चाहिए।' मुझे लगता है कि यह अद्वितीय बाधा के कारण है, इसलिए मान लें कि मैं इससे छुटकारा पा सकता हूं, फिर मुझे यह मिल गया अन्य त्रुटि: 'त्रुटि: संदर्भित तालिका "बैचों" के लिए दिए गए कुंजियों से मेल खाने वाली कोई अनूठी बाधा नहीं है और यह एक रेफरेंसिंग कॉलम बैच_आईड के कारण है जो एक विदेशी कुंजी है और वितरित तालिका में वितरण कॉलम होना चाहिए, है ना? – Joe

संबंधित मुद्दे