سؤال

ما هي أفضل أساليب متابعة و/أو أتمتة DB schema التغييرات ؟ يستخدم فريقنا التخريب من أجل التحكم في الإصدار و كنا قادرين على أتمتة بعض المهام بهذه الطريقة (دفع يبني انطلاق ملقم نشر اختبار التعليمات البرمجية إلى خادم إنتاج) ولكن نحن لا تزال تفعل قاعدة بيانات التحديثات يدويا.وأود أن تجد أو إيجاد حل يسمح لنا بالعمل بكفاءة عبر ملقمات مع بيئات مختلفة مع الاستمرار في استخدام التخريب بمثابة الخلفية التي من خلالها الرمز DB التحديثات دفعت إلى خوادم مختلفة.

العديد من حزم البرامج شعبية تشمل السيارات-تحديث البرامج النصية التي كشف DB إصدار وتطبيق التغييرات اللازمة.هذا هو أفضل طريقة للقيام بذلك حتى على نطاق أوسع (عبر مشاريع متعددة وأحيانا بيئات متعددة ولغات)?إذا كان الأمر كذلك ، هل هناك أي البرمجية الموجودة هناك التي يبسط عملية أو هو الأفضل لفة منطقتنا الحل ؟ وقد أي شخص ينفذ شيئا من هذا القبيل قبل ومتكاملة في التخريب بعد ارتكاب السنانير أو أن هذه فكرة سيئة ؟

بينما الحل الذي يدعم منصات متعددة سيكون من الأفضل ، نحن بالتأكيد بحاجة إلى دعم لينكس/Apache/MySQL/PHP كومة معظم عملنا على هذا المنبر.

هل كانت مفيدة؟

المحلول

في القضبان العالم ، هناك مفهوم الهجرات النصوص التي التغييرات إلى قاعدة البيانات في روبي بدلا من قاعدة البيانات الخاصة نكهة SQL.روبي الخاص بك الهجرة رمز ينتهي يجري تحويلها إلى DDL الخاصة الحالية في قاعدة البيانات ؛ وهذا يجعل تحويل قاعدة بيانات منصات سهلة جدا.

كل تغيير تقوم على قاعدة البيانات ، يمكنك كتابة جديدة للهجرة.الهجرات عادة طريقتين:"حتى" الطريقة التي يتم تطبيق التغييرات و "أسفل" الطريقة التي يتم التراجع عن التغييرات.أمر واحد يجمع بيانات ما يصل إلى التاريخ ، ويمكن أيضا أن تستخدم لجعل قاعدة البيانات إلى إصدار محدد من المخطط.في القضبان ، الهجرات يتم الاحتفاظ بها في الخاصة بهم دليل في دليل المشروع والحصول على فحص في التحكم في الإصدار مثل أي مشروع قانون.

هذا أوراكل دليل القضبان الهجرات يغطي الهجرات بشكل جيد جدا.

للمطورين استخدام لغات أخرى بحثت في الهجرات ونفذت لغتهم-إصدارات معينة.أنا أعرف من Ruckusing, PHP الهجرات النظام الذي هو على غرار القضبان' المهاجرة ، قد يكون ما تبحث عنه.

نصائح أخرى

نحن نستخدم شيء مماثل bcwoord للحفاظ على قاعدة البيانات لدينا المخطط متزامنة عبر 5 المنشآت المختلفة (الإنتاج ، التدريج بضع تنمية المنشآت) ، احتياطيا في التحكم في الإصدار ، وأنه يعمل بشكل جيد جدا.سوف معقدة قليلا:


لمزامنة قاعدة البيانات هيكل ، لدينا واحد النصي ، update.php وعدد من الملفات مرقمة من 1.sql ، 2.sql ، 3.sql, الخ.يستخدم البرنامج النصي واحدة اضافية جدول لتخزين رقم الإصدار الحالي من قاعدة البيانات.N. ملفات sql هي وضعت باليد للانتقال من النسخة (ن-1) إلى الإصدار ن من قاعدة البيانات.

أنها يمكن أن تستخدم لإضافة الجداول ، إضافة أعمدة ترحيل البيانات من القديم إلى الجديد شكل عمود ثم إسقاط عمود إدراج "سيد" صفوف البيانات مثل أنواع المستخدم ، إلخ.في الأساس, أنها يمكن أن تفعل أي شيء مع البيانات المناسبة الهجرة النصوص أنك لن تفقد البيانات.

تحديث البرنامج النصي يعمل مثل هذا:

  • الاتصال بقاعدة البيانات.
  • إجراء نسخة احتياطية من قاعدة البيانات الحالية (لأن الأشياء سوف تذهب الخطأ) [mysqldump].
  • إنشاء مسك الدفاتر الجدول (يسمى _meta) إذا لم يكن موجودا.
  • قراءة النسخة الحالية من _meta الجدول.نفترض 0 إذا لم يتم العثور على.
  • للجميع .sql الملفات مرقمة أعلى من النسخة تنفيذها في
  • إذا كان أحد الملفات المنتجة خطأ:العودة إلى النسخ الاحتياطي
  • وإلا تحديث الإصدار في مسك الدفاتر الجدول إلى أعلى .ملف sql تنفيذها.

كل شيء يذهب إلى عنصر تحكم مصدر كل التثبيت النصي التحديث إلى أحدث إصدار مع واحد تنفيذ البرنامج النصي (الدعوة update.php مع مناسبة مرور قاعدة البيانات.... الخ).نحن إس في تحديث التدريج بيئات الإنتاج عبر السيناريو الذي يستدعي تلقائيا تحديث قاعدة البيانات النصي ، حتى رمز التحديث يأتي مع ما يلزم من تحديثات قاعدة البيانات.

يمكننا أيضا استخدام نفس البرنامج النصي إلى إعادة إنشاء قاعدة البيانات بأكملها من نقطة الصفر ؛ نحن فقط إسقاط ثم إعادة إنشاء قاعدة البيانات ثم قم بتشغيل البرنامج النصي الذي تم إعادة قاعدة البيانات.يمكننا أيضا استخدام البرنامج النصي لملء قاعدة بيانات فارغة على الاختبار الآلي.


استغرق الأمر بضع ساعات فقط لإعداد هذا النظام ، فمن الناحية النظرية بسيطة والجميع يحصل على نسخة نظام ترقيم و أنها كانت لا تقدر بثمن في وجود القدرة على التحرك إلى الأمام في تطور تصميم قاعدة البيانات ، دون الحاجة إلى الاتصال أو يدويا تنفيذ التعديلات على جميع قواعد البيانات.

حذار عند لصق استفسارات بريس على الرغم من! تلك التي تم إنشاؤها الاستفسارات عادة ما تشمل اسم قاعدة البيانات التي أنت بالتأكيد لا تريد لأنه سوف كسر البرامج النصية الخاصة بك!شيء مثل إنشاء الجدول mydb.newtable(...) سوف تفشل إذا كانت قاعدة البيانات على نظام لا يسمى mydb.أنشأنا قبل التعليق إس هوك التي من شأنها عدم السماح .sql الملفات التي تحتوي على mydb السلسلة الذي هو علامة على يقين من أن شخص ما نسخ/لصق من بريس بدون فحص.

فريقي مخطوطات جميع التغييرات على قاعدة البيانات و يرتكب تلك البرامج النصية إس, جنبا إلى جنب مع كل إصدار من التطبيق.هذا يسمح تغييرات تدريجية من قاعدة البيانات بدون فقدان أي بيانات.

الذهاب من إصدار واحد إلى آخر ، تحتاج فقط لتشغيل مجموعة من البرامج النصية "التغيير" ، قاعدة البيانات الخاصة بك هو ما يصل إلى التاريخ ، و ما زال لديك جميع البيانات الخاصة بك.قد لا يكون أسهل طريقة, لكن هو بالتأكيد فعالة.

القضية هنا هي حقا يجعل من السهل للمطورين النصي المحلية الخاصة بهم التغييرات في عنصر تحكم مصدر للمشاركة مع الفريق.لقد واجهت هذه المشكلة لسنوات عديدة, وكانت مستوحاة من وظائف Visual Studio قاعدة البيانات المهنيين.إذا كنت تريد أداة مفتوحة المصدر مع نفس الميزات جرب هذا: http://dbsourcetools.codeplex.com/ والمتعة ، - ناثان.

إذا كنت لا تزال تبحث عن حلول :نقترح أداة تسمى neXtep مصمم.بل هو قاعدة بيانات بيئة التطوير التي يمكنك وضع قاعدة البيانات بأكملها تحت التحكم في الإصدار.كنت تعمل على الإصدار تسيطر على مستودع حيث كل تغيير يمكن تتبعها.

عندما كنت بحاجة إلى إطلاق التحديث, يمكنك ارتكاب مكونات المنتج سوف تولد تلقائيا SQL ترقية البرنامج النصي من الإصدار السابق.بالطبع, يمكنك توليد هذه SQL من أي 2 الإصدارات.

ثم لديك العديد من الخيارات :يمكنك أن تأخذ تلك النصوص ووضعها في SVN مع التطبيق الخاص بك التعليمات البرمجية بحيث أنه سوف يتم نشرها في القائمة الخاصة بك آلية.وثمة خيار آخر هو استخدام آلية تسليم من neXtep :البرامج النصية التي يتم تصديرها في ما يسمى "تسليم حزمة" (البرامج النصية SQL + XML واصف) و المثبت يمكن أن نفهم هذه الحزمة و نشرها إلى الخادم الهدف مع ضمان strcutural الاتساق التبعية التحقق من تسجيل الإصدار المثبت ، إلخ.

المنتج هو GPL و هو على أساس الكسوف بحيث يتم تشغيله على لينكس, ماك وويندوز.كما دعم Oracle, Mysql و Postgresql في هذه اللحظة (DB2 الدعم على الطريق).إلقاء نظرة على ويكي حيث يمكنك العثور على معلومات أكثر تفصيلا :http://www.nextep-softwares.com/wiki

تفريغ المخطط في ملف إضافة إلى "عنصر تحكم مصدر".ثم بسيط مهرجان دبي السينمائي الدولي سوف تظهر لك ما تغيرت.

سكوت Ambler تنتج سلسلة كبيرة من المواد (و شارك في تأليف الكتاب) على قاعدة إعادة بيع ديون ، مع فكرة أنه يجب تطبيق أساسا TDD المبادئ والممارسات للحفاظ على المخطط الخاص بك.إعداد سلسلة من هيكل البذور وحدة بيانات اختبارات قاعدة البيانات.ثم قبل تغيير أي شيء, يمكنك تعديل/كتابة الاختبارات لتعكس هذا التغيير.

كنا نفعل هذا لبعض الوقت الآن ويبدو أن العمل.كتبنا كود لتوليد الأساسية العمود اسم و نوع بيانات الشيكات في اختبار وحدة جناح.يمكننا إعادة هذه الاختبارات في أي وقت للتحقق من أن قاعدة البيانات في SVN checkout المباريات الحية db التطبيق يعمل في الواقع.

كما اتضح ، المطورين أيضا في بعض الأحيان قرص رمل قاعدة بيانات والإهمال لتحديث ملف المخطط في إس.رمز ثم يعتمد على db التغيير الذي لم يتحقق.هذا النوع من الأخطاء يمكن بجنون الصعب أن أحدد لكن اختبار جناح سوف تلتقط على الفور.هذا هو لطيف للغاية إذا كان لديك بنيت في أكبر التكامل المستمر الخطة.

K.سكوت Allen لائق المادة أو اثنين على مخطط الإصدارات التي يستخدم تزايدي تحديث البرامج النصية/الهجرات المفهوم المشار إليها في إجابات أخرى هنا ؛ انظر http://odetocode.com/Blogs/scott/archive/2008/01/31/11710.aspx.

انها نوع من التكنولوجيا منخفضة ، قد يكون هناك حل أفضل هناك ، ولكن يمكن فقط تخزين المخطط في برنامج نصي SQL التي يمكن تشغيل لإنشاء قاعدة البيانات.أعتقد يمكنك تنفيذ الأوامر لإنشاء هذا السيناريو, ولكن أنا لا أعرف الأمر للأسف.

ثم الالتزام النصي إلى "عنصر تحكم مصدر" جنبا إلى جنب مع التعليمات البرمجية التي تعمل على ذلك.عندما كنت بحاجة إلى تغيير مخطط جنبا إلى جنب مع رمز البرنامج النصي يمكن التحقق في جنبا إلى جنب مع التعليمات البرمجية التي يتطلب تغيير المخطط.ثم ديفس على السيناريو سوف تشير إلى ديفس على التغييرات المخطط.

مع هذا البرنامج النصي يمكنك دمجه مع DBUnit أو نوع من البناء النصي ، لذلك يبدو أنه يمكن أن يصلح بك بالفعل العمليات المؤتمتة.

إذا كنت تستخدم C#, إلقاء نظرة على دون سرعة الصوت, a مفيدة جدا ORM أداة ، بل هو أيضا يولد النصي sql إلى صوغه المخطط الخاص بك و / أو البيانات.هذه البرامج النصية ثم يمكن وضعه في عنصر تحكم مصدر.

http://subsonicproject.com/

لقد استعملت ما يلي قاعدة البيانات هيكل المشروع في Visual Studio لعدة مشاريع وانها عملت بشكل جيد:

قاعدة البيانات

تغيير البرامج النصية

0.PreDeploy.sql

1.SchemaChanges.sql

2.DataChanges.sql

3.الأذونات.sql

إنشاء البرامج النصية

Sprocs

وظائف

الآراء

لدينا بناء النظام ثم تحديث قاعدة بيانات من إصدار واحد إلى آخر عن طريق تنفيذ البرامج النصية في الترتيب التالي:

1.PreDeploy.sql

2.SchemaChanges.sql

محتويات إنشاء مجلد البرامج النصية

2.DataChanges.sql

3.الأذونات.sql

كل مطور الشيكات في التغييرات معين علة/الميزة عن طريق إلحاق التعليمات البرمجية الخاصة بهم إلى نهاية من كل ملف.مرة واحدة رئيسية النسخة كاملة تشعبت في المصدر التحكم في محتويات .ملفات sql في تغيير مجلد البرامج النصية يتم حذفها.

ونحن استخدام بسيط جدا ولكن بعد حل فعال.

من أجل تثبيت جديد لدينا البيانات الوصفية.ملف sql في المستودع الذي يحمل كل DB schema, ثم في بناء العملية نستخدم هذا الملف لإنشاء قاعدة البيانات.

للحصول على التحديثات اضافة التحديثات في البرنامج ضمنية.علينا أن نحافظ عليه ضمنية لأننا لا أحب حل المشاكل قبل هو حقا مشكلة هذا النوع من الشيء لم يثبت أن مشكلة حتى الآن.

حتى في برنامجنا لدينا شيء من هذا القبيل:

RegisterUpgrade(1, 'ALTER TABLE XX ADD XY CHAR(1) NOT NULL;');

هذا الرمز سوف تحقق إذا كانت قاعدة البيانات في الإصدار 1 (والتي يتم تخزينها في جدول تم إنشاؤه تلقائيا) ، إذا فمن عفا عليها الزمن ، ثم تنفيذ الأمر.

إلى تحديث البيانات الوصفية.sql في مستودع نقوم بتشغيل هذا ترقيات محليا ومن ثم استخراج كامل قاعدة البيانات الوصفية.

الشيء الوحيد الذي يحدث كل ذلك في كثير من الأحيان ، هو أن ننسى مشركا البيانات الوصفية.sql لكن هذه ليست مشكلة كبيرة لأن من السهل اختبار على عملية الإنشاء و أيضا الشيء الوحيد الذي يمكن أن يحدث هو أن تجعل تثبيت جديد مع قديم قاعدة بيانات مطورة على أول استخدام.

أيضا نحن لا ندعم خفضه ، وإنما هو حسب التصميم ، إذا كان هناك شيء يكسر على التحديث ، ونحن استعادة الإصدار السابق و إصلاح التحديث قبل المحاولة مرة أخرى.

أنا إنشاء مجلدات اسمه بعد بناء الإصدارات ووضع ترقية وتحديث البرامج النصية في هناك.على سبيل المثال ، هل يمكن أن يكون المجلدات التالية:1.0.0, 1.0.1 و 1.0.2.كل واحد يحتوي على البرنامج النصي الذي يسمح لك ترقية أو تقليله قاعدة البيانات الخاصة بك بين الإصدارات.

يجب على العميل أو العملاء الاتصال بك مع مشكلة مع الإصدار 1.0.1 استخدام 1.0.2, جلب قاعدة البيانات مرة أخرى إلى الإصدار لن يكون مشكلة.

في قاعدة البيانات الخاصة بك, إنشاء جدول يسمى "مخطط" حيث يمكنك وضع في النسخة الحالية من قاعدة البيانات.ثم كتابة برنامج يمكن ترقية أو تقليله قاعدة البيانات الخاصة بك بالنسبة لك من السهل.

تماما مثل جوي قال: إذا كنت في القضبان ، الهجرات.:)

بلدي الحالي PHP المشروع نستخدم فكرة القضبان الهجرات و لدينا الهجرات الدليل الذي نحن نضع ملفات عنوان "migration_XX.sql" حيث XX هو عدد من الهجرة.حاليا يتم إنشاء هذه الملفات باليد كما يتم إجراء التحديثات, ولكن خلقهم يمكن تعديلها بسهولة.

ثم لدينا برنامج نصي يسمى "Migration_watcher" التي هي في مرحلة ما قبل ألفا ، حاليا يعمل على كل تحميل الصفحة و التحقق من ما إذا كان هناك جديد migration_XX.ملف sql حيث XX هو أكبر من الحالية الهجرة الإصدار.إذا كان الأمر كذلك فإنه يعمل كل migration_XX.sql ملفات تصل إلى أكبر عدد قاعدة بيانات وفويلا!مخطط التغييرات الآلي.

إذا كنت تحتاج إلى القدرة على الرجوع النظام يتطلب الكثير من التغيير والتبديل, لكنه بسيط و كان يعمل بشكل جيد جدا بالنسبة لنا إلى حد ما صغيرة الفريق حتى الآن.

أود أن أوصي باستخدام النمل (عبر منصة) على "البرمجة" الجانب (لأنه عمليا يمكن التحدث مع أي db هناك طريق jdbc) و التخريب المصدر مستودع.سوف النمل alow لك "احتياطية" db الخاص بك إلى الملفات المحلية ، قبل إجراء التغييرات.1.النسخ الاحتياطي القائمة db schema إلى الملف عن طريق النمل 2.التحكم في الإصدار إلى التخريب مستودع طريق النمل 3.إرسال الجديدة البيانات sql db طريق النمل

الضفدع على الخلية لديه وظيفة تسمى مقارنة مخطط يسمح لك لمزامنة 2 قواعد البيانات.هو أفضل أداة ولقد استخدمت حتى الآن.

IMHO الهجرات لدي مشكلة كبيرة:

الترقية من إصدار واحد إلى آخر يعمل بشكل جيد, ولكن تفعل تركيب جديد من إصدار محدد قد يستغرق إلى الأبد إذا كان لديك مئات من الجداول تاريخ طويل من التغييرات (كما نفعل نحن).

تشغيل كل تاريخ دلتا منذ الأساس حتى الإصدار الحالي (لمئات من العملاء قواعد البيانات) قد يستغرق وقتا طويلا جدا.

أنا أحب الطريقة كيف يي مقابض قاعدة بيانات الهجرة.الهجرة هي في الأساس PHP النصي تنفيذ CDbMigration. CDbMigration ويعرف up الأسلوب الذي يحتوي على الهجرة المنطق.فمن الممكن أيضا أن تنفيذ down طريقة لدعم عكس الهجرة.بدلا من ذلك ، safeUp أو safeDown يمكن استخدامها للتأكد من أن عملية الترحيل تتم في إطار الصفقة.

يي هو أداة سطر الأوامر yiic يحتوي على الدعم لإنشاء وتنفيذ الهجرات.الهجرات يمكن تطبيقها أو عكسه ، إما واحد أو في مجموعة.خلق الهجرة النتائج في كود PHP الطبقة تنفيذ CDbMigration, اسم فريد على أساس زمني و الهجرة الاسم المحدد من قبل المستخدم.جميع الهجرات التي تم تطبيقها في وقت سابق إلى قاعدة البيانات مخزنة في الهجرة الجدول.

لمزيد من المعلومات راجع قاعدة بيانات الهجرة المادة من دليل.

محاولة db-نشر - أساسا جافا أداة ولكن يعمل مع php كذلك.

هناك سطر الأوامر الخلية-مهرجان دبي السينمائي الدولي أداة يقارن بيانات المخططات ، حيث من المخطط أن تكون قاعدة بيانات حية أو النصي SQL على القرص.انه لامر جيد بالنسبة لمعظم مخطط الهجرة المهام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top