আমি কীভাবে এসকিউএল ডাটাবেস লকগুলি প্রতিরোধ করব?


11

এসকিউএলাইট এফএকিউ থেকে আমি এটি জানি:

একাধিক প্রক্রিয়া একই সময়ে একই ডাটাবেস খোলা থাকতে পারে। একাধিক প্রক্রিয়া SELECTএকই সময়ে একটি কাজ করতে পারে । তবে কেবলমাত্র একটি প্রক্রিয়া সময়ে যেকোন মুহুর্তে ডাটাবেসে পরিবর্তন আনতে পারে।

সুতরাং, যতদূর আমি বুঝতে হিসাবে আমি করতে: 1) একাধিক থ্রেড থেকে ডিবি পড়ুন ( SELECT) 2) একাধিক থ্রেড থেকে ডিবি পড়ুন ( SELECTএকক থ্রেড থেকে) এবং লিখন ( CREATE, INSERT, DELETE)

তবে, আমি রাইট-এহেড লগিং সম্পর্কে পড়েছিলাম যা পাঠকদের লেখকদের অবরুদ্ধ করে না এবং কোনও লেখক পাঠককে অবরুদ্ধ করে না বলে আরও সম্মতি দেয় । পড়া এবং লেখা একই সাথে অগ্রসর হতে পারে।

অবশেষে, আমি সম্পূর্ণরূপে বলার পেয়েছিলাম করেছি যখন আমি পাওয়া এটা যখন নিদিষ্ট:

এসকিউআইএলআইটি প্রতিরোধের জন্য অন্য কারণগুলি এখানে রয়েছে:

  • চেষ্টা CREATEবা DROPএকটি টেবিল বা ইনডেক্স যখন একটি SELECTবিবৃতি এখনও হয় নি।
  • একটি SELECTএকই টেবিলে সক্রিয় থাকাকালীন কোনও টেবিলে লেখার চেষ্টা করছে ।
  • SELECTস্ক্লাইটটি যদি সেট না করা থাকে তবে একটি বহুবিধ অ্যাপ্লিকেশনটিতে একই টেবিলে একই সাথে দুটি করার চেষ্টা করছেন ।
  • fcntl (3, FBSETLK কল DB ফাইলে ব্যর্থ হয় This এটি একটি এনএফএস লকিং সমস্যার কারণে হতে পারে, উদাহরণস্বরূপ this এই ইস্যুটির একটি সমাধান হ'ল ডিবি কে দূরে রাখা, এবং এটি আবার কপি করা যাতে এটির একটি নতুন ইনোড মান থাকে

সুতরাং, আমি নিজের জন্য পরিষ্কার করতে চাই, লকটি এড়ানো দরকার? আমি কি দুটি একই থ্রেড থেকে একই সাথে পড়তে এবং লিখতে পারি? ধন্যবাদ।

উত্তর:


9

আপনি যে পৃষ্ঠাটি লিঙ্ক করেছেন, বেশ পুরানো হওয়ার পাশাপাশি একই ডাটাবেস সংযোগের মাধ্যমে (বা ভাগ করা ক্যাশে মোডে মাল্টিপ্যাক সংযোগের মাধ্যমে , যা আপনার ব্যবহার করা উচিত নয়) একই প্রক্রিয়া থেকে অ্যাক্সেস সম্পর্কে কথা বলে talks

ওয়াল মোডে না থাকলে, একই ডাটাবেস থেকে একাধিক সংযোগগুলি পড়তে পারে তবে একটি লেখার লেনদেন একচেটিয়া, অর্থাত্, অন্য কোনও পাঠক বা লেখককে অনুমতি দেওয়া হয় না।

ওয়াল মোডে, একজন লেখক এবং পাঠক একে অপরকে অবরুদ্ধ করেন না, তবে এখনও কেবল একজন লেখককেই অনুমতি দেওয়া আছে।


1
ভাগ করা ক্যাশে মোডে কী ভুল? লুপের জন্য জব্লাব সমান্তরাল এর মাধ্যমে একটি টেবিলে এটি লিখতে আমি একই প্রক্রিয়াতে একাধিক অজগর থ্রেড পেতে সক্ষম হয়েছি । isolation_level=Noneযদিও একটি সেট না হওয়া পর্যন্ত আমার লকিংয়ের সমস্যা ছিল । ভাগ করা ক্যাশে মোড ব্যতীত আমি থ্রেডগুলির মধ্যে কীভাবে উদাহরণগুলি ভাগ করব?
জাস্টিন ডিয়ারিং

1
ডকুমেন্টেশন অসুবিধাগুলি বর্ণনা করে। এটি বিশেষত বিপজ্জনক যদি আপনি কীভাবে অচলাবস্থা এড়াতে জানেন না।
সিএল

পার্টিতে খুব দেরিতে আসছেন তবে এই লিঙ্কটি কার্যকর। manski.net/2012/10/sqlite-performance
infocyde
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.