হাইবারনেট: hbm2ddl.auto = উত্পাদনে আপডেট?


339

hbm2ddl.auto=updateউত্পাদনের পরিবেশে ডেটাবেস স্কিমাকে আপডেট করতে কনফিগার করা হাইবারনেট অ্যাপ্লিকেশনগুলি চালানো কি ঠিক ?


6
আমরা এটা করি. কখনও কোনও সমস্যা হয়নি।
ক্রেটজেল

4
খুব ভাল প্রশ্ন। আমি এখন এটি মুখোমুখি। তাহলে এখন 2018 - 10 বছর পরে আপনার মতামত কী? জটিল স্কিমার সাহায্যে গুরুত্বপূর্ণ ক্লায়েন্টের প্রোডাকশন ডেটাবেজে হাইবারনেটের আপডেটটি ব্যবহার করা কি নিরাপদ?
কিরিল চ

উত্তর:


388

না, এটি অনিরাপদ।

হাইবারনেট টিমের সর্বোত্তম প্রচেষ্টা সত্ত্বেও, আপনি কেবল উত্পাদনে স্বয়ংক্রিয় আপডেটগুলির উপর নির্ভর করতে পারবেন না । আপনার নিজের প্যাচগুলি লিখুন, ডিবিএর সাথে সেগুলি পর্যালোচনা করুন, তাদের পরীক্ষা করুন, তারপরে ম্যানুয়ালি প্রয়োগ করুন।

তাত্ত্বিকভাবে, যদি hbm2ddl আপডেট হয় যদি বিকাশে কাজ করে তবে এটি উত্পাদনেও কাজ করা উচিত। কিন্তু বাস্তবে, এটি সবসময় হয় না।

এমনকি যদি এটি ঠিকঠাক কাজ করে তবে এটি উপ-অনুকূল হতে পারে। ডিবিএগুলিকে এক কারণে অনেক বেশি অর্থ প্রদান করা হয়।


33
এটি অনিরাপদ কেন?
ক্রেটজেল

74
এটি অনিরাপদ কারণ প্রয়োগ করা প্যাচগুলির পার্শ্ব প্রতিক্রিয়া থাকতে পারে যা hbm2ddl খুব কমই পূর্বাভাস দিতে পারে (যেমন টেবিল সংশোধন করার জন্য ইনস্টল করা ট্রিগারগুলি অক্ষমকরণ হিসাবে)। জটিল স্কিমার জন্য সবচেয়ে নিরাপদ উপায় হ'ল ম্যানুয়াল। পোস্ট-রিগ্রেশন টেস্টিং সহ স্বয়ংক্রিয়ভাবে দূরের দ্বিতীয়। সমস্ত আইএমএইচও।
ভ্লাদিমির ডিউজেভ

18
এছাড়াও একটি ডিবি স্কিমা আপডেট করা পেশাদার (ডিবিএস) দ্বারা পরিচালনা করা উচিত। খারাপ ডিবি পরিবর্তন থেকে পুনরুদ্ধার করা সর্বোত্তম কঠিন। ভোভা এটি উল্লেখ করেনি - তবে হাইবারনেটের আপডেটটি কোনও কলাম বাদ দিয়ে আবার যুক্ত করার সিদ্ধান্ত নিয়েছে তবে প্রকার বা আকার পরিবর্তিত হওয়ায় কী হবে। এবং আসুন কলামটি কি আপনার সমস্ত ব্যবহারকারীদের ইমেল ঠিকানাগুলি বলে? :-) বাই, বিদায় সংস্থা ..... আপনি ডিডিএল পরিবর্তনটি স্বয়ংক্রিয়ভাবে উত্পন্ন করতে চান - তবে আপনি অবশ্যই একজন মানুষের দ্বারা পরিদর্শন করা পরিবর্তনটি চান।
প্যাট

9
আপনি আপগ্রেড করার আগে আপনার ডাটাবেসগুলি ব্যাকআপ করবেন না?
জ্যাকব 11

21
Fww, এই মুহুর্তে হাইবারনেটের স্কিমা আপডেটটি টেবিল বা কলামগুলি বাদ দেয় না।
ব্রায়ান ডিটারলিং

70

আমরা এটি এমন একটি অ্যাপ্লিকেশন নিয়ে তৈরি করি যা মিশন সমালোচনামূলক নয় এবং কর্মীদের জন্য খুব বেশি বেতনভোগী ডিবিএ না নিয়েও রয়েছে। এটি কেবলমাত্র একটি কম ম্যানুয়াল প্রক্রিয়া যা মানুষের ত্রুটির সাথে সম্পর্কিত - অ্যাপ্লিকেশনটি পার্থক্যটি সনাক্ত করতে পারে এবং সঠিক কাজটি করতে পারে, এবং আপনি সম্ভবত এটি বিভিন্ন বিকাশ এবং পরীক্ষার পরিবেশে পরীক্ষা করেছেন।

একটি সতর্কতামূলক - একটি ক্লাস্টার্ড পরিবেশে আপনি এড়াতে চাইতে পারেন কারণ একাধিক অ্যাপ একই সাথে আসতে পারে এবং স্কিমাকে সংশোধন করার চেষ্টা করতে পারে যা খারাপ হতে পারে। বা এমন কোনও ব্যবস্থা রাখুন যেখানে স্কিমার আপডেটের জন্য কেবলমাত্র একটি উদাহরণ অনুমোদিত।


2
আমরা প্রডাকশনেও এটি ব্যবহার করি, অনুরূপ ব্যবহারের ক্ষেত্রে। অ্যানালিটিক্স প্ল্যাটফর্ম যা মিশন সমালোচনা নয়। হাইবারনেট সহ এতগুলি হিচাপ ছাড়াই আমরা 4 টি পরিবেশের (4 টি) উপরে 16 কে বার স্থাপন করেছি। আমরা একটি ছোট দল এবং আমরা সবাই বেশিরভাগই এসকিউএল আরডিবিএস শুরু করি এবং আমাদের নিজের চেয়ে হাইবারনেট হ্যান্ডলিং স্কিমায় আরও ভাল বিশ্বাস আছে। আমি অবাক হই যে মাইগ্রেশন এবং স্কিমা পরিবর্তনগুলি পরিচালনার কর্মীদের উপর ডিবিএ থাকার ক্ষেত্রে ত্রুটি হার কী? এটি কি K 16 কে মোতায়েনের চেয়ে 0 এর চেয়ে ভাল?
ব্যবহারকারী 3263752

প্যাট দ্বারা এই মন্তব্যে আপনি কী বলবেন? stackoverflow.com/questions/221379/…
শিব কুমার

52

হাইবারনেট নির্মাতারা তাদের "জাভা পার্সিস্টিস্ট উইথ হাইবারনেট" বইয়ের একটি উত্পাদন পরিবেশে এমনভাবে নিরুৎসাহিত করেন :

সতর্কতা: আমরা দেখেছি হাইবারনেট ব্যবহারকারীরা কোনও প্রোডাক্ট ডেটাবেসের স্কিমাকে স্বয়ংক্রিয়ভাবে আপডেট করতে স্কিমাআপেট ব্যবহার করতে চেষ্টা করছে। এটি দ্রুত বিপর্যয়ে শেষ হতে পারে এবং আপনার ডিবিএ দ্বারা অনুমতি দেওয়া হবে না।


1
এটি কি 2006 সালে লেখা হয়েছিল?
ব্যবহারকারী 3263752

28

আপডেটের চেঞ্জলগ রাখার জন্য লিকুইবেস এক্সএমএল দেখুন। আমি এই বছর পর্যন্ত এটি কখনও ব্যবহার করি নি, তবে আমি দেখেছি যে এটি শিখতে এবং ডিবি সংশোধন নিয়ন্ত্রণ / মাইগ্রেশন / পরিবর্তন পরিচালনাকে খুব বোকা বানানো খুব সহজ। আমি একটি গ্রোভি / গ্রেইস প্রকল্পে কাজ করি এবং গ্রিলস তার সমস্ত ওআরএমের নীচে হাইবারনেট ব্যবহার করে ("GORM" নামে পরিচিত)। আমরা সমস্ত এসকিউএল স্কিমা পরিবর্তনগুলি পরিচালনা করতে লিকুইবেস ব্যবহার করি, যা আমাদের অ্যাপ্লিকেশন নতুন বৈশিষ্ট্যগুলির সাথে বিকশিত হওয়ায় আমরা প্রায়শই প্রায়শই করি।

মূলত, আপনি আপনার অ্যাপ্লিকেশনটি বিকশিত হওয়ার সাথে সাথে যোগ করতে চালিয়ে যাওয়া এমন একটি এক্সএমএল ফাইল রাখেন। এই ফাইলটি আপনার বাকী প্রকল্পের সাথে গিট (বা আপনি যা ব্যবহার করছেন) রেখে দেওয়া হয়েছে। যখন আপনার অ্যাপ্লিকেশন স্থাপন করা হবে, লিকুইবেস আপনি যে ডিবিতে সংযোগ করছেন তা চেঞ্জলগ টেবিলটি চেক করে যাতে এটি ইতিমধ্যে কী প্রয়োগ করা হয়েছে তা জানতে পারে, তবে এটি বুদ্ধিমানভাবে কেবল ফাইল থেকে এখনও যেগুলি চেঞ্জসেট প্রয়োগ করা হয়নি তা প্রয়োগ করে। এটি অনুশীলনে একেবারে দুর্দান্ত কাজ করে এবং আপনি যদি এটি আপনার সমস্ত স্কিমা পরিবর্তনের জন্য ব্যবহার করেন তবে আপনি 100% আত্মবিশ্বাসী হতে পারেন যে কোড আপনি চেকআউট এবং মোতায়েন করেছেন তা সর্বদা একটি সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ ডাটাবেস স্কিমায় সংযোগ করতে সক্ষম হবে।

আশ্চর্যের বিষয়টি হ'ল আমি আমার ল্যাপটপে সম্পূর্ণ ফাঁকা স্লেট মাইএসকিএল ডাটাবেস নিতে পারি, অ্যাপটি ফায়ার করতে পারি এবং ঠিক তখনই আমার জন্য স্কিমা সেট আপ করা যেতে পারে। এটি স্থানীয়-দেব বা স্টেজিং ডিবিতে প্রথমে প্রয়োগ করে স্কিমা পরিবর্তনগুলি পরীক্ষা করা সহজ করে তোলে।

এটির সাথে সূচনা করার সবচেয়ে সহজ উপায় সম্ভবত আপনার বিদ্যমান ডিবি নেওয়া এবং তারপরে প্রাথমিক বেসলাইন.এক্সএমএল ফাইল তৈরি করতে লিকুইবেস ব্যবহার করা। তারপরে ভবিষ্যতে আপনি কেবল এটিতে সংযোজন করতে পারবেন এবং স্কিমা পরিবর্তনগুলি পরিচালনা করার জন্য তরলবাইজকে নিতে দিন।

http://www.liquibase.org/


নিখুঁত, আমি যা করতে চলেছিলাম। আমি সবচেয়ে ভাল জিনিসটি অনুভব করছি, এক ধাপ এগিয়ে যাওয়ার সাথে যুক্ত করা hbm2ddl.auto=updateহ'ল যাতে আপনার ক্লাস / ডিবি ম্যাপিংগুলি বৈধতা পেতে পারে এবং তরল পদার্থের মাধ্যমে আপনার ডিবি তৈরির সম্পূর্ণ নিয়ন্ত্রণ থাকে। আপনি কি মনে করেন?
ভোলগব্বর

ওহো, আমি বোঝাতে validate
চাইছি

"অন্তর্ভুক্ত-আমদানি" যেমন সমর্থন এবং সংস্করণ সমর্থন এবং ফাইলগুলির জন্য "প্রকার" বৈশিষ্ট্য ব্যবহার করে স্ক্রিপ্ট পরিচালনার ক্ষেত্রে তরলবিকাস আরও ভাল যা প্যারেন্ট চাইল্ড সম্পর্কযুক্ত বিভিন্ন পরিবেশের জন্য আপনাকে আলাদা এসকিউএল ফাইল রাখতে সহায়তা করে। সংক্ষেপে, traditionalতিহ্যবাহী এসকিউএল এমজিএমটি যান। উৎপাদন. উন্নয়নের জন্য, আমাদের উত্পাদন জন্য গতি প্রয়োজন, আমাদের গ্যারান্টি এবং স্থায়িত্ব এবং ব্যাকআপ প্রয়োজন।
করণ কা

26

আমি ভোট দেব হাইবারনেট কখন কলামগুলির জন্য ডেটাটাইপগুলি পরিবর্তন করেছে তা বোঝা যাচ্ছে না। উদাহরণ (মাইএসকিউএল ব্যবহার করে):

String with @Column(length=50)  ==> varchar(50)
changed to
String with @Column(length=100) ==> still varchar(50), not changed to varchar(100)

@Temporal(TemporalType.TIMESTAMP,TIME,DATE) will not update the DB columns if changed

সম্ভবত অন্যান্য উদাহরণও রয়েছে যেমন স্ট্রিং কলামটির দৈর্ঘ্য 255-এর উপরে চাপানো এবং এটি পাঠ্য, মাঝারি পাঠ্য ইত্যাদিতে রূপান্তরিত করা ইত্যাদি seeing

মঞ্জুর, নতুন কলাম তৈরি না করে, ডেটা অনুলিপি করে ও পুরাতন কলামটি উড়িয়ে দিয়েই "ডেটাটাইপগুলি" রূপান্তর করার সত্যিই উপায় আছে বলে আমি মনে করি না। তবে আপনার ডাটাবেসে যে মিনিটে কলাম রয়েছে তাতে যে হাইবারনেট ম্যাপিং আপনি খুব বিপজ্জনকভাবে জীবনযাপন করছেন তা প্রতিফলিত করে না ...

ফ্লাইওয়ে এই সমস্যাটি মোকাবেলায় একটি ভাল বিকল্প:

http://flywaydb.org


1
আমি কেবল আপনার উদাহরণের প্রথম অংশটি চেষ্টা করেছিলাম - আমার ক্ষেত্রে পরিবর্তিত @Column(length = 45)হচ্ছে @Column(length = 255)। হাইবারনেট ৪.৩..6 যাচাই করতে পারে F ফাইনাল ডাটাবেস স্কিমা ব্যবহার করে সঠিকভাবে আপডেট করেছে hbm2ddl.auto=update। (একটি বিষয় উল্লেখ করার জন্য হ'ল ডাটাবেসটিতে বর্তমানে কোনও তথ্য নেই - কেবল কাঠামো।)
স্টিভ চেম্বারস

খুব সম্ভব যে তারা গত ~ 6 বছর বা তারও বেশি সময় ধরে এই বাগটি স্থির করেছিলেন। তবে আপনার যদি স্কিমাতে ডেটা থাকে এবং কলামের প্রস্থ হ্রাসের ফলে এমন কোনও পরিবর্তন ঘটে থাকে তবে আপনি ত্রুটি বা পরিচালনা ব্যবস্থা না থাকা ডেটা কাটাতে চলে যাবেন।
ক্লিফ.মায়ার্স

1
ফ্লাইওয়েডবিতে ম্যানুয়ালি একটি এসকিউএল স্ক্রিপ্ট তৈরি করা দরকার, এটি একটি স্বয়ংক্রিয় প্রোগ্রাম কী করতে পারে তার চেয়ে ভাল হওয়া উচিত তবে কে একটি বড় স্ক্রিপ্ট লিখতে পারে, তবে এটি সমস্যা।
বং রিকিমারু

25

হাইবারনেটকে নিজেকে আবরণ করার জন্য পণ্যগুলিতে অটো আপডেটগুলি ব্যবহার না করার বিষয়ে অস্বীকৃতি জানাতে হবে যখন তারা যখন জানে না যে তারা কী করছে তা এটি ব্যবহার না করা পরিস্থিতিতে এমনটি ব্যবহার করে।

অনুমোদিত যে পরিস্থিতি যেখানে এটি ঠিক আছে তার চেয়ে বেশি পরিমাণে এটি ব্যবহার করা উচিত নয়।

আমি বহু বছর ধরে এটি প্রচুর বিভিন্ন প্রকল্পে ব্যবহার করেছি এবং কখনও কোনও সমস্যা হয়নি। এটি কোনও খোঁড়া উত্তর নয়, এবং এটি কাউবয় কোডিং নয়। এটি একটি .তিহাসিক ঘটনা।

যে ব্যক্তি "উত্পাদনে এটি কখনই করবেন না" বলে বলে সে একটি নির্দিষ্ট উত্পাদন স্থাপনার একটি সেট সম্পর্কে চিন্তা করছে, যাকে তার সাথে পরিচিত (তার সংস্থা, তার শিল্প ইত্যাদি)।

"উত্পাদন স্থাপনার" মহাবিশ্ব বিস্তৃত এবং বৈচিত্র্যময়।

একজন অভিজ্ঞ হাইবারনেট বিকাশকারী জানেন যে ডিডিএল প্রদত্ত ম্যাপিং কনফিগারেশন থেকে ঠিক কী ঘটতে চলেছে। যতক্ষণ আপনি পরীক্ষা করে যাচাই করেন যে আপনি যা প্রত্যাশা করছেন তা ডিডিএলে শেষ হবে (দেব, ক্যু, স্টেজিং ইত্যাদি), আপনি ভাল আছেন।

যখন আপনি প্রচুর বৈশিষ্ট্য যুক্ত করছেন, অটো স্কিমা আপডেটগুলি রিয়েল টাইম সেভার হতে পারে।

স্টাফ স্বয়ংক্রিয় আপডেটগুলির তালিকা হ্যান্ডল করবে না অন্তহীন, তবে কয়েকটি উদাহরণ ডেটা মাইগ্রেশন, অ-নন কলাম, কলামের নাম পরিবর্তন ইত্যাদি adding

এছাড়াও আপনাকে গুচ্ছ পরিবেশে যত্ন নেওয়া দরকার।

তবে আবার, আপনি যদি এই সমস্ত জিনিস জানতেন তবে আপনি এই প্রশ্নটি জিজ্ঞাসা করবেন না। হুঁ। । । ঠিক আছে, আপনি যদি এই প্রশ্নটি জিজ্ঞাসা করছেন তবে আপনাকে হাইবারনেট এবং অটো স্কিমার আপডেটগুলি ব্যবহার করার বিষয়ে চিন্তা করার আগে আপনার প্রচুর অভিজ্ঞতা না পাওয়া পর্যন্ত অপেক্ষা করা উচিত।


19

আমি যেমন এই নিবন্ধে ব্যাখ্যা করেছি , এটি ব্যবহার করা ভাল ধারণা নয়hbm2ddl.auto উত্পাদনে ।

ডাটাবেস স্কিমা পরিচালনা করার একমাত্র উপায় হ'ল ইনক্রিমেন্টাল মাইগ্রেশন স্ক্রিপ্টগুলি ব্যবহার করা কারণ:

  • স্ক্রিপ্টগুলি আপনার কোড বেস সহ ভিসিএসে থাকবে। আপনি যখন একটি শাখা চেকআউট করেন, আপনি স্ক্র্যাচ থেকে পুরো স্কিমা পুনরায় তৈরি করুন।
  • উত্পাদনের ক্ষেত্রে প্রয়োগের আগে একটি ক্রমবর্ধমান স্ক্রিপ্টগুলি কিউএ সার্ভারে পরীক্ষা করা যেতে পারে
  • স্ক্রিপ্টগুলি ফ্লাইওয়ে দ্বারা চালিত হতে পারে বলে ম্যানুয়াল হস্তক্ষেপের প্রয়োজন নেই , সুতরাং এটি স্ক্রিপ্টগুলি ম্যানুয়ালি চালনার সাথে সম্পর্কিত মানুষের ত্রুটির সম্ভাবনা হ্রাস করে।

এমনকি হাইবারনেট ব্যবহারকারী গাইড আপনাকে hbm2ddlউত্পাদন পরিবেশের জন্য সরঞ্জামটি এড়াতে পরামর্শ দেয় ।

এখানে চিত্র বর্ণনা লিখুন


এটি একটি সঠিক উত্তর এবং এটির সাথে একমত। তবে আমি নিজেই প্রথম ডাটাবেস স্ক্রিপ্টটি ম্যানুয়ালি জটিল হয়ে উঠার ধারণাটি পেয়েছি (যেমন লিঙ্কের উদাহরণের ক্ষেত্রে V1_0__initial_script.sql)। হাইবারনেট আমার জন্য তৈরি করা এবং V1_0_intial_script.sql এ সঞ্চয় করতে আমার বিদ্যমান বিকাশের ডিবি থেকে কোনও স্ক্রিপ্ট তৈরি করতে পারি কি এমন উপায় আছে ??
হোপকিং

1
SchemaExportএই পরীক্ষার কেস দ্বারা প্রদর্শিত হিসাবে ব্যবহার করুন ।
ভ্লাদ মিহালসিয়া

ধন্যবাদ। আমি একটি একক লাইন ডাম্প "mysqldump -u root -p --no-data dbname> યોજના ".sql" এ এসেছি। এর থেকে উত্পন্ন ডাম্পটি ব্যবহারে কোনও ত্রুটি আছে কি?
হোপকিং

1
ডিবি ডাম্প ব্যবহার করে কোনও সমস্যা নেই।
ভ্লাদ মিহলসিয়া

8

আমরা এখন কয়েক মাস ধরে উত্পাদিত একটি প্রকল্পে এটি করি এবং এখনও পর্যন্ত কোনও সমস্যা হয়নি। এই রেসিপিটির জন্য প্রয়োজনীয় 2 টি উপাদান মনে রাখবেন:

  1. একটি পিছন-সঙ্গতির পদ্ধতির, যে হয় সঙ্গে আপনার অবজেক্ট মডেল ডিজাইন অনুমোদন প্রত্যাহার বস্তু এবং অপসারণ / তাদের পরিবর্তনের বদলে বৈশিষ্ট্যাবলী। এর অর্থ হ'ল যদি আপনাকে কোনও অবজেক্ট বা অ্যাট্রিবিউটটির নাম পরিবর্তন করতে হয় তবে পুরানোটিকে যেমনটি রেখে যান, নতুনটি যুক্ত করুন এবং কোনও প্রকারের মাইগ্রেশন স্ক্রিপ্ট লিখুন। যদি আপনাকে অবজেক্টগুলির মধ্যে কোনও সংযোগ পরিবর্তন করতে হয়, যদি আপনি ইতিমধ্যে উত্পাদনে থাকেন তবে এর অর্থ হ'ল আপনার নকশাটি প্রথম স্থানে ভুল ছিল, তাই পুরানো ডেটা প্রভাবিত না করে নতুন সম্পর্কটি প্রকাশ করার নতুন উপায় সম্পর্কে ভাবার চেষ্টা করুন।

  2. সর্বদা স্থাপনার পূর্বে ডেটাবেসটিকে ব্যাকআপ করুন।

আমার অনুভূতিটি এই পোস্টটি পড়ার পরে - এই আলোচনায় অংশ নেওয়া 90% লোক কেবল উত্পাদনের পরিবেশে স্বয়ংক্রিয়তা ব্যবহারের চিন্তায় আতঙ্কিত। কেউ কেউ বল ডিবিএতে ফেলে দেন । এক মুহুর্তটি বিবেচনা করুন তবে তা বিবেচনা করুন যে সমস্ত উত্পাদন পরিবেশ একটি ডিবিএ সরবরাহ করবে না এবং অনেক দেব দলই একটি সামর্থ্য রাখতে সক্ষম নয় (কমপক্ষে মাঝারি আকারের প্রকল্পের জন্য)। সুতরাং, আমরা যদি এমন দলগুলির বিষয়ে কথা বলি যেখানে প্রত্যেককেই সবকিছু করতে হয়, বলটি তাদের উপর রয়েছে।

এই ক্ষেত্রে, কেন কেবল উভয় বিশ্বের সেরা হওয়ার চেষ্টা করবেন না? এর মতো সরঞ্জামগুলি এখানে সাহায্যের হাত দেওয়ার জন্য, যা - সাবধানতার সাথে নকশা এবং পরিকল্পনা সহ - অনেক পরিস্থিতিতে সহায়তা করতে পারে। এবং আমার বিশ্বাস, প্রশাসকরা প্রাথমিকভাবে এটি বোঝা শক্ত হতে পারে তবে যদি তারা জানে যে বলটি তাদের হাতে নেই, তবে তারা এটি পছন্দ করবে।

ব্যক্তিগতভাবে, আমি যে কোনও ধরণের স্কিমা বাড়ানোর জন্য হাতে হাতে স্ক্রিপ্টগুলি লেখার পিছনে ফিরে যাব না, তবে এটি আমার মতামত। এবং সম্প্রতি নোএসকিউএল স্কিমা-কম ডাটাবেসগুলি গ্রহণ করা শুরু করার পরে, আমি দেখতে পাচ্ছি যে খুব শীঘ্রই, এই সমস্ত স্কিমা-ভিত্তিক ক্রিয়াকলাপ অতীতের অন্তর্গত হবে, সুতরাং আপনি নিজের দৃষ্টিকোণ পরিবর্তন করতে আরও ভাল লাগলেন।


4
আমি নোএসকিউএল মন্তব্য সম্পর্কে একমত নই। এটি অবশ্যই বৃদ্ধি পাচ্ছে এবং এর স্থান রয়েছে, তবে এমন অনেকগুলি অ্যাপ্লিকেশন রয়েছে যা নোটএসকিউএল সহজলভ্যভাবে সরবরাহ করতে পারে না এমন একচেটিয়া এবং লেনদেনের সাথে ডেটা অখণ্ডতার জন্য এসিডি সম্মতির উপর একেবারে নির্ভর করে।
জেএসওয়াইন

7

আমি এটির ঝুঁকি নেব না কারণ আপনি হয়ত ডেটা হারিয়ে ফেলবেন যা সংরক্ষণ করা উচিত ছিল। hbm2ddl.auto = আপডেট হ'ল আপনার ডেভ ডাটাবেসটি আপ টু ডেট রাখার এক সহজ উপায়।


2
আপনি আপগ্রেড করার আগে আপনার ডাটাবেসগুলি ব্যাকআপ করবেন না?
জ্যাকব

6
হ্যাঁ অবশ্যই আমি করি তবে ব্যাকআপ থেকে পুনরুদ্ধার করা অনেক কাজ। আপনি যখন সুশৃঙ্খল ফ্যাশনে আপনার ডাটাবেস আপডেট করতে পারেন তখন ব্যাকআপগুলি পুনরুদ্ধার করতে কোনও ঝামেলা হয় না।
জাপ কুম্যানস

6
  • আমার ক্ষেত্রে (হাইবারনেট ৩.৩.২, পোস্টগ্র্যাস্কিল, উবুন্টু) সেটিংস hibernate.hbm2ddl.auto=updateকেবল নতুন টেবিল তৈরি করেছে এবং ইতিমধ্যে বিদ্যমান সারণীতে নতুন কলাম তৈরি করেছে।

  • এটি টেবিলগুলি ফেলেছে না, কলামগুলি ছাড়ছে না, কলামগুলিকেও পরিবর্তন করবে না। এটিকে নিরাপদ বিকল্প বলা যেতে পারে তবে এর মতো hibernate.hbm2ddl.auto=create_tables add_columnsআরও কিছু আরও পরিষ্কার।


6

এটি নিরাপদ নয়, প্রস্তাবিত নয়, তবে এটি সম্ভব।

উত্পাদনে স্বয়ংক্রিয় আপডেট বিকল্পটি ব্যবহার করে আমার একটি অ্যাপ্লিকেশনটিতে অভিজ্ঞতা আছে।

ঠিক আছে, এই সমাধানটিতে পাওয়া প্রধান সমস্যা এবং ঝুঁকিগুলি হ'ল:

  • ভুল ডাটাবেসে স্থাপন করুন । আপনি যদি ভুল ডাটাবেসে অ্যাপ্লিকেশন সার্ভারটি অ্যাপ্লিকেশনটির একটি পুরানো সংস্করণ (EAR / WAR / ইত্যাদি) দিয়ে চালাতে ভুল করেন ... আপনার অনেক নতুন কলাম, টেবিল, বিদেশী কী এবং ত্রুটি থাকবে। একই সমস্যাটি ডেটাসোর্স ফাইলে একটি সাধারণ ভুলের সাথে দেখা দিতে পারে, (অনুলিপি / পেস্ট ফাইল এবং ডাটাবেস পরিবর্তন করতে ভুলে গেছে)। পুনরায় শুরুতে, পরিস্থিতিটি আপনার ডাটাবেসে বিপর্যয় দেখা দিতে পারে।
  • অ্যাপ্লিকেশন সার্ভারটি শুরু হতে খুব বেশি সময় নেয় । হাইবারনেট আপনি যখনই অ্যাপ্লিকেশনটি শুরু করবেন তখন সমস্ত তৈরি টেবিল / কলাম / ইত্যাদি সন্ধান করার চেষ্টা করে কারণ এটি ঘটে। তার (টেবিল, কলাম, ইত্যাদি) কী তৈরি করা দরকার তা জানতে হবে। ডাটাবেস টেবিলগুলি বড় হওয়ার সাথে সাথে এই সমস্যাটি আরও খারাপ হবে।
  • ডাটাবেস সরঞ্জাম এটি ব্যবহার করা প্রায় অসম্ভব । একটি নতুন সংস্করণ দিয়ে চলার জন্য ডাটাবেস ডিডিএল বা ডিএমএল স্ক্রিপ্টগুলি তৈরি করতে, আপনি অ্যাপ্লিকেশন সার্ভারটি শুরু করার পরে অটো-আপডেট দ্বারা কী তৈরি হবে সে সম্পর্কে আপনাকে ভাবতে হবে। উদাহরণস্বরূপ, যদি আপনাকে কিছু ডেটা দিয়ে একটি নতুন কলাম পূরণ করতে হয় তবে আপনাকে অ্যাপ্লিকেশন সার্ভারটি শুরু করতে হবে, হাইবারনেট নতুন কলামটি ক্রেটিতে অপেক্ষা করুন এবং এর পরে কেবল এসকিউএল স্ক্রিপ্টটি চালান। আপনি দেখতে পাচ্ছেন, ডাটাবেস স্থানান্তর সরঞ্জামগুলি (যেমন ফ্লাইওয়ে, লিকুইবেস ইত্যাদি) অটো-আপডেট সক্ষম করে ব্যবহার করা প্রায় অসম্ভব।
  • ডাটাবেস পরিবর্তনগুলি কেন্দ্রীভূত নয় । হাইবারনেট সারণী এবং অন্য সবকিছুর তৈরি হওয়ার সম্ভাবনার সাথে, অ্যাপ্লিকেশনটির প্রতিটি সংস্করণে ডাটাবেসে পরিবর্তনগুলি দেখা শক্ত, কারণ তাদের বেশিরভাগই স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়।
  • ডেটাবেজে আবর্জনা উৎসাহিত করে । স্বতঃ আপডেটের "সহজ" ব্যবহারের কারণে, আপনার দল পুরানো কলাম এবং পুরানো টেবিলগুলি ফেলে দেওয়ার অবহেলা করার সুযোগ রয়েছে, কারণ হাইবারনেট অটো আপডেট এটি করতে পারে না।
  • আসন্ন বিপর্যয় । উত্পাদনে কিছু বিপর্যয়ের আসন্ন ঝুঁকি (অন্যান্য উত্তরে বর্ণিত কিছু লোকের মতো)। এমনকি কোনও অ্যাপ্লিকেশন চলমান রয়েছে এবং বছরের পর বছর ধরে আপডেট হওয়া সত্ত্বেও, আমি মনে করি এটি নিরাপদ পছন্দ নয়। এই বিকল্পটি ব্যবহার করার সাথে আমি কখনই নিরাপদ বোধ করিনি।

সুতরাং, আমি উত্পাদনে স্বয়ংক্রিয় আপডেট ব্যবহার করার পরামর্শ দেব না।

আপনি যদি সত্যিই উত্পাদনে স্বয়ংক্রিয় আপডেট ব্যবহার করতে চান তবে আমি প্রস্তাব দিই:

  • পৃথকীকৃত নেটওয়ার্ক । আপনার পরীক্ষার পরিবেশ হোমোলজ পরিবেশে অ্যাক্সেস করতে পারে না। এটি টেস্ট পরিবেশে হোমোলোজেশন ডেটাবেস পরিবর্তন করার জন্য এমন একটি স্থাপনাকে আটকাতে সহায়তা করে।
  • স্ক্রিপ্ট অর্ডার পরিচালনা করুন । মোতায়েনের পরে (স্থাপনা টেবিল পরিবর্তন, ড্রপ টেবিল / কলামগুলি) এবং স্ক্রিপ্টের (নতুন কলাম / টেবিলের জন্য তথ্য পূরণ করুন) পূর্বে আপনার স্ক্রিপ্টগুলি পরিচালনা করতে হবে organize

এবং অন্য পোস্টগুলির থেকে আলাদা, আমি মনে করি না যে স্বয়ংক্রিয় আপডেট এটি "খুব ভাল বেতনের" ডিবিএ (অন্যান্য পোস্টে উল্লিখিত) সাথে সম্পর্কিত enabled সারণী এবং কলামগুলি তৈরি / পরিবর্তন / মোছার জন্য এসকিউএল স্টেটমেন্ট লেখার চেয়ে ডিবিএগুলির আরও গুরুত্বপূর্ণ জিনিস রয়েছে। এই সাধারণ নিত্য কাজগুলি বিকাশকারীগণ দ্বারা সম্পন্ন এবং স্বয়ংক্রিয়ভাবে করা যেতে পারে এবং কেবল ডিবিএ টিমের পর্যালোচনা করার জন্য পাস করা হয়, হাইবারনেট এবং ডিবিএগুলি তাদের লেখার জন্য "খুব ভাল অর্থ প্রদানের" প্রয়োজন হয় না।


4

না, কখনই করবেন না। হাইবারনেট ডেটা মাইগ্রেশন পরিচালনা করে না। হ্যাঁ, এটি আপনার স্কিমাটি সঠিকভাবে দেখায় তবে এটি নিশ্চিত করে না যে মূল্যবান উত্পাদন ডেটা প্রক্রিয়াটিতে হারিয়ে গেছে।


4
  • সাধারণত বড় সংস্থাগুলিতে এন্টারপ্রাইজ অ্যাপ্লিকেশনগুলি হ্রাস সুবিধা সহ চালিত হয়।

  • ডাটাবেস ব্যবহারকারীর নামটিতে DDLকলাম যুক্ত করার hbm2ddl.auto=updateপ্রয়োজন নেই যা প্রয়োজন।


এই সমস্যাটি আমি প্রায়শই মুখোমুখি হই। আমরা প্রাথমিক ডিবি তৈরির জন্য হাইবারনেট ব্যবহার করার চেষ্টা করি তবে এটি প্রায়শই সম্ভব হয় না।
ড্যান

5
এটি কোনও "সমস্যা" নয়, এটি একটি সঠিক বিষয়।
ভ্লাদিমির দিউজেভ

2

আমি ভ্লাদিমিরের সাথে একমত আমার সংস্থার প্রশাসকরা অবশ্যই এমন প্রশংসা করবেন না যদি আমি এমনকি এমন কোনও কোর্স প্রস্তাব করি।

আরও, হাইবারনেটকে অন্ধভাবে বিশ্বাস করার পরিবর্তে একটি এসকিউএল স্ক্রিপ্ট তৈরি করা আপনাকে সেই ক্ষেত্রগুলি অপসারণের সুযোগ দেয় যা আর ব্যবহার হয় না। হাইবারনেট এটি করে না।

এবং আমি নতুন স্কীমার সাথে প্রোডাকশন স্কিমা তুলনা করলে আপনি ডেটা মডেলটিতে যে পরিবর্তন করেছেন সেটিকে আরও ভাল অন্তর্দৃষ্টি দেয়। আপনি অবশ্যই জানেন, কারণ আপনি এটি তৈরি করেছেন, কিন্তু এখন আপনি সমস্ত পরিবর্তনগুলি এক সাথে দেখতে পাচ্ছেন। এমনকি যেগুলি আপনাকে "হোয়াট হেক ?!" এর মতো করে তোলে make

এমন সরঞ্জাম রয়েছে যা আপনার জন্য স্কিমা ডেল্টা তৈরি করতে পারে, তাই এটি এমনকি কঠোর পরিশ্রমেরও নয়। এবং তারপরে আপনি ঠিক কী ঘটতে চলেছেন তা জানেন।


"এমন সরঞ্জাম রয়েছে যা আপনার জন্য একটি স্কিমা ডেল্টা তৈরি করতে পারে": আপনি কি এই জাতীয় কিছু সরঞ্জাম দেখিয়ে দিতে পারেন?
ড্যানিয়েল ক্যাসিডি

আমি মনে করি apexsql.com/sql_tools_diff.asp এটি করে এবং সম্ভবত আরও অ্যাপ্লিকেশন। আমি সাধারণত এটি স্কিমাটি ডাম্প করে এবং ডিফিং করে (ডিফ ব্যবহার করে) হাতে করে করি।
এক্সারেনন

2

অ্যাপ্লিকেশনগুলির স্কিমা সময়ে বিকশিত হতে পারে; আপনার যদি বেশ কয়েকটি ইনস্টলেশন থাকে, যা বিভিন্ন সংস্করণে থাকতে পারে তবে আপনার অ্যাপ্লিকেশন, কোনও ধরণের সরঞ্জাম বা স্ক্রিপ্ট কোনও সংস্করণ থেকে পরবর্তী সংস্করণে ধাপে ধাপে স্কিমা এবং ডেটা স্থানান্তর করতে সক্ষম কিনা তা নিশ্চিত করার কিছু উপায় থাকতে হবে।

হাইবারনেট ম্যাপিংগুলিতে আপনার সমস্ত অধ্যবসায় রাখা (বা টীকাগুলি) স্কিমা বিবর্তনকে নিয়ন্ত্রণে রাখার জন্য খুব ভাল উপায়।

আপনার বিবেচনা করা উচিত যে স্কিমা বিবর্তনের বিভিন্ন দিক বিবেচনা করা উচিত:

  1. আরও কলাম এবং সারণী যুক্ত করে ডেটাবেস স্কিমার বিবর্তন

  2. পুরানো কলাম, টেবিল এবং সম্পর্কগুলি বাদ দেওয়া

  3. ডিফল্ট সহ নতুন কলামগুলি পূরণ করা

হাইবারনেট সরঞ্জামগুলি বিশেষত ক্ষেত্রে গুরুত্বপূর্ণ (আমার অভিজ্ঞতার মতো) আপনার অনেকগুলি বিভিন্ন ধরণের ডাটাবেসে একই অ্যাপ্লিকেশনটির বিভিন্ন সংস্করণ রয়েছে।

আপনি হাইবারনেট ব্যবহার করছেন এমন ক্ষেত্রে পয়েন্ট 3 অত্যন্ত সংবেদনশীল, যদি আপনি একটি নতুন বুলিয়ান মূল্যবান সম্পত্তি বা সংখ্যার সাথে পরিচয় করিয়ে দেন, যদি হাইবারনেট এই জাতীয় কলামগুলিতে কোনও নাল মান খুঁজে পায়, যদি একটি ব্যতিক্রম উত্থাপন করে।

সুতরাং আমি যা করব তা হ'ল: স্কিমা আপডেটের হাইবারনেট সরঞ্জামের ক্ষমতাটি ব্যবহার করুন তবে আপনাকে অবশ্যই এটির পাশাপাশি কিছু ডেটা এবং স্কিমা রক্ষণাবেক্ষণ কলব্যাক যুক্ত করতে হবে, যেমন ডিফল্ট পূরণ করার জন্য, আর ব্যবহৃত ব্যবহৃত কলাম বাদ দেওয়া এবং এই জাতীয়। এইভাবে আপনি সুবিধাগুলি পাবেন (ডাটাবেস ইন্ডিপেন্ডেন্ট স্কিমা আপডেট স্ক্রিপ্টগুলি এবং আপডেটগুলির ডুপ্লিকেট কোডিং এড়িয়ে চলা, অস্তিত্ব এবং স্ক্রিপ্টগুলিতে) তবে আপনি অপারেশনের সমস্ত দিকও কভার করেন।

সুতরাং উদাহরণস্বরূপ, যদি কোনও সংস্করণ আপডেটে কেবলমাত্র একটি ভার্চার মূল্যবান সম্পত্তি (সুতরাং কলাম) যুক্ত করার অন্তর্ভুক্ত থাকে যা ডিফল্টরূপে বাতিল হয়ে যেতে পারে, স্বয়ংক্রিয় আপডেটের সাথে আপনার কাজ শেষ হয়ে যাবে। যেখানে আরও জটিলতা প্রয়োজন সেখানে আরও কাজ করা প্রয়োজন।

এটি ধরেই নেওয়া হচ্ছে যে আপডেট হওয়া অ্যাপ্লিকেশনটি তার স্কিমা আপডেট করার পক্ষে সক্ষম (এটি করা যেতে পারে), যার অর্থ এটিও এটির স্কিমায় ব্যবহারকারীর অধিকার থাকতে হবে। যদি গ্রাহকের নীতি এটি (সম্ভাব্য টিকটিকি ব্রেনের ক্ষেত্রে) প্রতিরোধ করে তবে আপনাকে ডাটাবেস - নির্দিষ্ট স্ক্রিপ্ট সরবরাহ করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.