ฉันใกล้จะมีโครงการของฉันพร้อมที่จะเปิดตัวแล้ว ฉันมีแผนใหญ่สำหรับหลังการเปิดตัวและโครงสร้างฐานข้อมูลกำลังจะเปลี่ยนไป - คอลัมน์ใหม่ในตารางที่มีอยู่รวมถึงตารางใหม่และการเชื่อมโยงใหม่กับโมเดลที่มีอยู่และแบบใหม่
ฉันยังไม่ได้แตะการย้ายข้อมูลใน Sequelize เนื่องจากฉันมีเพียงการทดสอบข้อมูลซึ่งฉันไม่คิดจะลบทุกครั้งที่ฐานข้อมูลเปลี่ยนแปลง
ด้วยเหตุนี้ในตอนนี้ฉันกำลังทำงานsync force: true
เมื่อแอปของฉันเริ่มทำงานหากฉันเปลี่ยนข้อกำหนดของโมเดล การดำเนินการนี้จะลบตารางทั้งหมดและสร้างขึ้นใหม่ตั้งแต่ต้น ฉันสามารถละเว้นforce
ตัวเลือกเพื่อให้สร้างตารางใหม่เท่านั้น แต่ถ้าสิ่งที่มีอยู่มีการเปลี่ยนแปลงสิ่งนี้ก็ไม่มีประโยชน์
เมื่อฉันเพิ่มในการโยกย้ายสิ่งต่างๆทำงานอย่างไร เห็นได้ชัดว่าฉันไม่ต้องการให้ตารางที่มีอยู่ (ที่มีข้อมูลอยู่ในนั้น) ถูกลบออกดังนั้นจึงsync force: true
ไม่ต้องสงสัยเลย ในแอปอื่น ๆ ที่ฉันได้ช่วยพัฒนา (Laravel และเฟรมเวิร์กอื่น ๆ ) ซึ่งเป็นส่วนหนึ่งของขั้นตอนการปรับใช้ของแอปเราเรียกใช้คำสั่งโยกย้ายเพื่อเรียกใช้การย้ายข้อมูลที่รอดำเนินการ แต่ในแอปเหล่านี้การย้ายข้อมูลครั้งแรกจะมีฐานข้อมูลโครงกระดูกโดยฐานข้อมูลอยู่ในสถานะที่เป็นช่วงต้นของการพัฒนาไม่ว่าจะเป็นรุ่นอัลฟ่ารุ่นแรกหรืออะไรก็ตาม ดังนั้นแม้แต่อินสแตนซ์ของแอปที่ไปปาร์ตี้ช้าก็สามารถเร่งความเร็วได้ในคราวเดียวโดยเรียกใช้การย้ายข้อมูลทั้งหมดตามลำดับ
ฉันจะสร้าง "การย้ายครั้งแรก" ใน Sequelize ได้อย่างไร หากฉันไม่มีอินสแตนซ์ใหม่ของแอปในทางที่ผิดจะไม่มีฐานข้อมูลโครงกระดูกให้เรียกใช้การย้ายข้อมูลหรือจะเรียกใช้การซิงค์เมื่อเริ่มต้นและจะทำให้ฐานข้อมูลอยู่ในสถานะใหม่ทั้งหมด ตารางใหม่เป็นต้น แต่เมื่อพยายามเรียกใช้การย้ายข้อมูลพวกเขาจะไม่สมเหตุสมผลเนื่องจากถูกเขียนด้วยฐานข้อมูลดั้งเดิมและการทำซ้ำแต่ละครั้งจะอยู่ในใจ
กระบวนการคิดของฉัน: ในทุกขั้นตอนฐานข้อมูลเริ่มต้นบวกกับการโยกย้ายแต่ละครั้งตามลำดับควรเท่ากับ (บวกหรือลบข้อมูล) ฐานข้อมูลที่สร้างขึ้นเมื่อ sync force: true
กำลังทำงานอยู่ เนื่องจากคำอธิบายแบบจำลองในรหัสอธิบายโครงสร้างฐานข้อมูล ดังนั้นบางทีถ้าไม่มีตารางการย้ายข้อมูลเราก็แค่เรียกใช้การซิงค์และทำเครื่องหมายการย้ายข้อมูลทั้งหมดว่าเสร็จสิ้นแม้ว่าจะไม่ได้ทำงานก็ตาม นี่คือสิ่งที่ฉันต้องทำ (อย่างไร) หรือ Sequelize ควรจะทำเองหรือฉันเห่าต้นไม้ผิด? และถ้าฉันอยู่ในพื้นที่ที่เหมาะสมก็ควรมีวิธีที่ดีในการสร้างการย้ายข้อมูลส่วนใหญ่โดยอัตโนมัติเนื่องจากโมเดลเก่า ๆ (โดยคอมมิตแฮช? หรือแม้กระทั่งการโอนย้ายแต่ละครั้งจะเชื่อมโยงกับคอมมิตหรือไม่ฉันยอมรับว่าฉันกำลังคิด ในจักรวาลที่มี git เป็นศูนย์กลางที่ไม่พกพาได้) และรุ่นใหม่ ๆ มันสามารถเปลี่ยนโครงสร้างและสร้างคำสั่งที่จำเป็นในการเปลี่ยนฐานข้อมูลจากเก่าเป็นใหม่และย้อนกลับจากนั้นนักพัฒนาสามารถเข้าไปและทำการปรับแต่งที่จำเป็น (การลบ / การเปลี่ยนข้อมูลโดยเฉพาะ ฯลฯ )
เมื่อฉันรันไบนารีภาคต่อด้วย--init
คำสั่งมันจะทำให้ฉันมีไดเร็กทอรีการโอนย้ายที่ว่างเปล่า เมื่อฉันเรียกใช้sequelize --migrate
มันทำให้ฉันเป็นตาราง SequelizeMeta โดยไม่มีอะไรอยู่ในนั้นไม่มีตารางอื่น ไม่แน่นอนเพราะไบนารีนั้นไม่ทราบวิธีบูตสแตรปแอปของฉันและโหลดโมเดล
ฉันต้องขาดอะไรบางอย่าง
TLDR: ฉันจะตั้งค่าแอปและการย้ายข้อมูลได้อย่างไรเพื่อให้อินสแตนซ์ต่างๆของแอปถ่ายทอดสดได้รับการอัปเดตตลอดจนแอปใหม่เอี่ยมที่ไม่มีฐานข้อมูลเริ่มต้นแบบเดิม
sync
ในตอนนี้ แต่แนวคิดก็คือการย้ายข้อมูล "สร้าง" ฐานข้อมูลทั้งหมดดังนั้นการอาศัยโครงกระดูกจึงเป็นปัญหาในตัวมันเอง ตัวอย่างเช่นขั้นตอนการทำงาน Ruby on Rails ใช้การย้ายข้อมูลสำหรับทุกสิ่งและมันก็ค่อนข้างยอดเยี่ยมเมื่อคุณคุ้นเคยกับมัน แก้ไข: และใช่ฉันสังเกตว่าคำถามนี้ค่อนข้างเก่า แต่เนื่องจากไม่เคยมีคำตอบที่น่าพอใจและผู้คนอาจมาที่นี่เพื่อขอคำแนะนำฉันคิดว่าฉันควรมีส่วนร่วม