এসকিউএল স্টেটমেন্টগুলি পরে কোনও খারাপ ধারণা কার্যকর করার জন্য কোনও টেবিলে সংরক্ষণ করা?


21

কোনও মাইএসকিউএল টেবিলে এসকিউএল স্টেটমেন্টগুলি পরে কোনও খারাপ ধারণা কার্যকর করার জন্য সংরক্ষণ করা হচ্ছে? এসকিউএল স্টেটমেন্টগুলি কার্যকর করার জন্য প্রস্তুত থাকবে, উদাহরণস্বরূপ, অদলবদল বা কোনও কিছুর কোনও পরামিতি থাকবে না DELETE FROM users WHERE id=1

আমার ধারণা আমি অলস হয়ে যাচ্ছি, তবে আমি এই ধারণাটি ভেবেছিলাম কারণ আমি এমন একটি প্রকল্পে কাজ করছি যেটির জন্য বেশ কয়েকটি ক্রোন চাকরির প্রয়োজন হবে যা সময়ে সময়ে এসকিউএল বিবৃতি কার্যকর করবে exec


আপনি যদি এই এসকিউএল বিবৃতিগুলি একবার চালাতে চান বা আপনি যদি একই বিবৃতি বারবার চালাতে চান তবে আপনার স্পষ্ট করা উচিত।
গ্র্যান্ডমাস্টারবি

10
এই পুরো প্রশ্নটি এমন একটি পরিস্থিতিতে মনে হচ্ছে যেখানে মৌলিক পদ্ধতির ভুল। তবে ঠিক কী বলা যায় কারণ সমস্যার জায়গাগুলি সম্পর্কে আমরা খুব কম জানি।
এরিক রবার্টসন

উত্তর:


46

এটি নিরাপদ, যদি আপনি এটি জিজ্ঞাসা করেন তবে। যতক্ষণ আপনি নিজের ডেটা সুরক্ষার সাথে আপনার সুরক্ষা সম্পর্কে যতটা যত্নবান হন careful

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

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

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


1
সিডিউলার ব্যবহার করে +1। সারণীর অ্যাক্সেসের চেয়ে শিডুলারের অ্যাক্সেস সীমাবদ্ধ করা কেবল প্রক্সকে সীমাবদ্ধ করা ভাল better
জেফো

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

32

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


2
তাহলে ক্রোন জব স্টোরেজ প্রক্রিয়াগুলির তালিকা চালানোর জন্য কোথায় রাখবে?
জেফো

1
এই দরকারী হতে পারে stackoverflow.com/questions/6560639/... যদিও এটা ক্রন ব্যবহার না
MetaFight

আমি কি ভাবছিলাম জানি না। প্রোকগুলির একটি তালিকা সমস্তই একটি একক প্রকল্প থেকে কার্যকর করা যেতে পারে, সুতরাং ক্রোন জব কেবলমাত্র একটি কার্যকর করতে হবে।
জেফো

11

না, আমি বলব এটি কোনও ভাল ধারণা নয়।

এর অর্থ প্রতিটি "রিয়েল" ক্যোয়ারী / আপডেটের ডাটাবেসে 2 টি হিট লাগবে - একটি "আসল" ক্যোয়ারী / আপডেট পেতে, এবং এটি সম্পাদন করার জন্য একটি।

এটি একটি ছোট সিস্টেমে একটি বিশাল সমস্যা নাও হতে পারে, তবে আপনার সিস্টেম যত বেশি ব্যবহারকারী / লেনদেন করবে তত কম।

আমি অনুমান করছি যে এটি আপনার কোডে এসকিউএল এম্বেড করার বিকল্প খুঁজছেন?

ম্যাসন হুইলারের পরামর্শ অনুসারে একটি সঞ্চিত পদ্ধতিতে এসকিউএলকে এনপ্যাপুলেট করা একটি উপায় যা এই ধারণার চেয়ে অনেক বেশি ভাল।


+1, এটিই মূল কারণ যা হ'ল ম্যাসন হুইলারের সমাধানটি সঠিক he আইএমএইচও যদিও এটির পারফরম্যান্স ইস্যু নয় তবে আমি এখানে সর্বাধিক গুরুত্বপূর্ণ হিসাবে দেখেছি - ডিবি থেকে এসকিউএল স্টেটমেন্ট বের করে জিনিসগুলিকে জটিল করার দরকার নেই এবং তখন তা ছাড়ের জন্য ফেরত পাঠানোর দরকার নেই।
ডক ব্রাউন

কেন বর্গক্ষেত্রের বিবৃতিগুলির তালিকা একই ডাটাবেস / সার্ভার ইত্যাদিতে সংরক্ষণ করতে হবে?
জেফো

1
ওপি হ'ল ডেটাবেজে 2 টি হিট প্রস্তাব করে। আমি বলি সে এটা করা উচিত নয়। আপনি তারপরে জিজ্ঞাসা করুন কেন এটি একই ডাটাবেস / সার্ভার হতে হবে। জিজ্ঞাসা করলাম কে বলেছে? আপনি তখন জিজ্ঞাসা করবেন কীভাবে আপনি ডিবিতে 2 টি হিট পান? আপনি যা করছেন তার পরিবর্তে আপনি কেন আপনার আসল প্রশ্নটি প্রকাশ করবেন না?
ওজ

1
@ জেফো এমনকি এটি একটি পৃথক ডাটাবেস হলেও, 1 কোয়েরিটি কী হওয়া উচিত তা এখনও 2 ডাটাবেসের অনুসন্ধান, যা অপ্রয়োজনীয়
ধীরগতির

1
@ ওজ: আপনি আপনার উত্তরের পারফরম্যান্সের দিকটি খুব বেশি ওজন দিয়েছেন - বেশিরভাগ বাস্তব-বিশ্বের পরিস্থিতিগুলিতে পারফরম্যান্স সম্ভবত অবহেলাযোগ্য। তবে দুটি ক্রিয়াকলাপের প্রয়োজন (প্রথমে "আসল" ক্যোয়ারী / আপডেট পাওয়া, দ্বিতীয়টি এটি কার্যকর করা) প্রয়োজনের চেয়ে জিনিসগুলিকে আরও জটিল করে তোলে।
ডক ব্রাউন

4

দুঃখিত, আমি এটি একটি ভাল ধারণা বলে মনে করি না।

প্রশ্নে সারণী পরিবর্তন হয় সেই ক্ষেত্রে বিবেচনা করুন। বলুন আপনার আইডি কলামটি নতুন_আইডিতে নাম বদলে যায় ।

পরিবর্তনের পাশাপাশি, আপনার কোডের একটি সংস্করণ রয়েছে যা ডাটাবেসের পুরাতন ভিনটেজের জন্য লেখা রয়েছে যা আর চলতে পারে না। অবশ্যই, আপনি কোড সারণীতে চেক করতে জানেন তবে এটি অন্য কারও জন্য তাত্ক্ষণিকভাবে স্পষ্ট নয়।

পরিবর্তনের জন্য যেমন আমি বর্ণনা করেছি, আমি সাধারণত ক্লায়েন্ট কোডে স্ট্যান্ডলোন এসকিউএল ফাইল, সঞ্চিত পদ্ধতি, ট্রিগার, ইন-লাইন এসকিউএল (ভিবি, সি #, সি ++ ইত্যাদি) দেখতে চাই তবে আমি যে শেষ স্থানটি দেখতে চাইব ডাটাবেস সারণিতে হয়। যদিও এখন আমি করব! :)


2

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

আপনি যে বর্ণনা করেছেন - "... এমন একটি প্রকল্পের জন্য যাতে বেশ কয়েকটি ক্রোন জব প্রয়োজন হয় যা সময়ে সময়ে এসকিউএল স্টেটমেন্ট কার্যকর করতে পারে" - অন্য উত্তরগুলি সম্ভবত আপনি ডিবিএমএসের জন্য স্টোর পদ্ধতি বা সমতুল্য ব্যবহার করেছেন এমন পরামর্শ দেওয়ার ক্ষেত্রে সঠিক are আবার ব্যবহার করছি।

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


1
উত্তরের জন্য ধন্যবাদ. আমি মাইএসকিউএল ইভেন্টগুলি চালানোর জন্য অনুসন্ধানগুলি নির্ধারিত করে ব্যবহার করে শেষ করেছি। বেশ কিছু লোক ভেবেছিল "মৌলিক পদ্ধতিটি ভুল" :) :) যখন আমার প্রয়োজন কেবল একটি নির্দিষ্ট ব্যবহারকারীর ক্রিয়া থেকে 15 মিনিটের পরে কয়েকটি এসকিউএল স্টেটমেন্ট চালানো হয়েছিল।
রোজম

2
@ আমগাদসুলিমান - সবার জন্য দাতব্য হওয়া বিশেষত এসই সাইটে গুরুত্বপূর্ণ to দৃ strong় মতামত পাওয়া ভাল, তবে আমরা যে নিদর্শনগুলির বিরুদ্ধে লড়াই চালিয়ে যাচ্ছি তার পক্ষে ওভার ম্যাচ করা খুব সহজ। তবে এই সাইটগুলিতে অন্যদের দাতব্য হওয়ার অংশটি যথেষ্ট প্রসঙ্গ সরবরাহ করে; অনেক বেশি আসল প্রশ্নটিকে অস্পষ্ট করতে পারে তবে পরবর্তীকালে সম্পাদনা দ্বারা এটি ঠিক করা বেশ সহজ।
কেনি এভিট

1

সহজ উপায়টি হ'ল কোয়েরিগুলি রাখার জন্য একটি .ini বা অন্য কনফিগারেশন ফ্লেভার ফাইল থাকা This আপনি এটি এক জায়গায় রাখতে পারেন, ডাটাবেস অ্যাক্সেস না করেই কোনও কিছু পরিবর্তন করতে পারেন, একাধিকবার ডাটাবেসটিতে আঘাত না করে এবং আপনি প্যারামিটারগুলি ব্যবহার করতে বা আপনার প্রশ্নগুলিতে শর্ত যুক্ত করার জন্য কিছু সময় প্রয়োজন / প্রয়োজন চাইতে পারেন (আপনার কোডে একটি বিশেষ কেসের জন্য আরও জটিল স্টাফ দিয়ে এগুলিকে বাড়িয়ে তুলুন)।

অবশ্যই আপনি এগুলি ডাটাবেস স্তরে রাখতে পারেন (হয় কোনও টেবিলের মধ্যে অথবা, আরও ভাল, সঞ্চিত পদ্ধতি হিসাবে) তবে আপনি যদি আমার মতো অলস হন ;-) তবে পারফরম্যান্সের সাথেও উদ্বিগ্ন হন, একটি .ini ফাইল এবং পিএইচপি এটি পড়ার প্রিয় পার্সে_নি পদ্ধতিটি হ'ল , আপনি যদি অন্য প্রোগ্রামিং ভাষার জন্য যান তবে আপনি নিজেরাই অনুরূপ পদ্ধতির সন্ধান করছেন)! সাধারণত আমি এই ফাইলটি অ্যাপ্লিকেশনটির বুটলোডারটিতে পড়তাম এবং স্ট্যাটিক অবজেক্টে রাখতাম (সম্ভবত উপরে একটি ক্যাশে স্তর থাকে) যদি আমরা খুব বেশি সংখ্যক স্বতন্ত্র প্রশ্নগুলির বিষয়ে কথা বলি things


1

আপনার যদি কেবল একবার এসকিউএল স্টেটমেন্টের প্রয়োজন হয়, উদাহরণস্বরূপ, আপনি যদি অফ-ঘন্টা চলাকালীন প্রচুর ক্রিয়াকলাপ সন্ধান করছেন, তবে হ্যাঁ, এগুলি একটি টেবিলের মধ্যে রেখে দেওয়া ঠিক কাজ করবে।

যদি আপনাকে নির্দিষ্ট বিরতিতে একই এসকিউএল স্টেটমেন্টটি কার্যকর করতে হয়, তবে অন্যরা উল্লেখ করেছেন যে স্টোরেজ পদ্ধতি রুটটি সম্ভবত আপনার জন্য আরও ভাল পছন্দ।

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

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