SQLite সমকালীন প্রবেশাধিকার


177

এসকিউএলাইট 3 একই ডিবি থেকে একাধিক প্রক্রিয়া পড়া / লেখার মাধ্যমে নিরাপদে সমবর্তী অ্যাক্সেস পরিচালনা করে? এতে কি কোনও প্ল্যাটফর্ম ব্যতিক্রম আছে?


3
আমি উল্লেখ করতে ভুলে গেছি খয়রাত goall: অধিকাংশ উত্তর বলে এটা ঠিক আছে: "SQLite ফাস্ট যথেষ্ট", "SQLite হ্যান্ডলগুলি ভাল concurrency" ইত্যাদি কিন্তু এই প্রোগ্রামটিতে, বিস্তারিতভাবে উত্তর দিচ্ছেন না / পরিষ্কারভাবে ব্যাখ্যা না যদি দুটি লেখার অপারেশন ঘটে ঠিক একই সময়ে উপস্থিত হবে (তাত্ত্বিক খুব বিরল ক্ষেত্রে)। 1) এটি একটি ত্রুটি ট্রিগার এবং প্রোগ্রাম বাধা দেবে? বা 2) দ্বিতীয় লেখার অপারেশনটি প্রথমটি শেষ হওয়া পর্যন্ত অপেক্ষা করবে? বা 3) লেখার অপারেশনগুলির মধ্যে একটির ফেলে দেওয়া হবে (ডেটা হ্রাস!)? ৪) আর কিছু? একযোগে লেখার সীমাবদ্ধতা জানা অনেক পরিস্থিতিতে কার্যকর হতে পারে।
বসজ

7
@ বাসজ সংক্ষেপে, ২) এটি বেশ কয়েকবার অপেক্ষা করুন এবং পুনরায় চেষ্টা করুন (কনফিগারযোগ্য), ১) ত্রুটি ট্রিগার করুন, এসকিউএলআইটি.বি.এস.ইউ.এস.আই.এস.) আপনি এসকিউএলআইটিE_BUSY ত্রুটিগুলি পরিচালনা করতে একটি কলব্যাক নিবন্ধন করতে পারেন।
অবলম্বন করুন

উত্তর:


112

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

বেশিরভাগ ডেস্কটপ / ল্যাপটপ / ট্যাবলেট / ফোন অ্যাপ্লিকেশনগুলির জন্য, এসকিউএলাইট যথেষ্ট দ্রুত সম্মতিযুক্ত না হওয়ায় দ্রুত। (ফায়ারফক্স বুকমার্ক, ইতিহাস ইত্যাদির জন্য এসকিউএলাইট ব্যাপকভাবে ব্যবহার করে)

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

আপনি যদি সত্যিই দ্রুত পঠন / লেখার অ্যাক্সেস চান তবে একটি মেমরির এসকিউএলাইট ডাটাবেস ব্যবহার করুন । র‌্যাম হ'ল ডিস্কের চেয়ে দ্রুততার একাধিক আদেশ।


16
ওপি দক্ষতা এবং গতি সম্পর্কে জিজ্ঞাসা করে না, তবে একযোগে অ্যাক্সেস সম্পর্কে। ওয়েব সার্ভারগুলির এর সাথে কোনও সম্পর্ক নেই। মেমরি ডাটাবেস সম্পর্কে একই।
জেরেকেকজ

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

1
কীভাবে আপনি ইন-মেমরি স্ক্লাইট ডাটাবেসে একসাথে অ্যাক্সেস পরিচালনা করবেন?
P-Gn

42

হ্যাঁ, এসকিউএলাইট সামঞ্জস্যকে ভালভাবে পরিচালনা করে তবে কোনও পারফরম্যান্স কোণ থেকে এটি সেরা নয়। আমি যা বলতে পারি তা থেকে তার কোনও ব্যতিক্রম নেই। বিশদগুলি এসকিউএলাইটের সাইটে রয়েছে: https://www.sqlite.org/lockingv3.html

এই বিবৃতিটি আগ্রহের বিষয়: "পেজার মডিউলটি নিশ্চিত করে তোলে যে পরিবর্তনগুলি একবারে ঘটেছিল, যা হয় সমস্ত পরিবর্তন ঘটে বা তাদের কোনওটিই ঘটে না, যে দুটি বা ততোধিক প্রক্রিয়া একই সাথে বেমানান উপায়ে ডাটাবেস অ্যাক্সেস করার চেষ্টা করে না"


2
বিভিন্ন প্ল্যাটফর্ম , যেমন এনএফএস ফাইল সিস্টেম এবং উইন্ডোজ সম্পর্কিত সমস্যাগুলি সম্পর্কে এখানে কিছু মন্তব্য রয়েছে (যদিও এটি কেবল উইন্ডোজের পুরানো সংস্করণগুলির সাথে সম্পর্কিত হতে পারে ...)
নেট

1
পিএইচপি-র সমস্ত ব্যবহারকারীর জন্য র‌্যামে কোনও এসকিউএলটি 3 ডাটাবেস লোড করা সম্ভব? আমি অনুমান করছি যে এটি প্রক্রিয়াগত হওয়ার সাথে নেই
আনোন 343224u ব্যবহারকারী

1
@ ফক্সাইফেনেক .. একটি সূচনা পয়েন্ট, যদিও এসকিউএলাইট এই ব্যবহারের ক্ষেত্রে সর্বোত্তম ডিবি নাও হতে পারে। sqlite.org/inmemorydb.html
কিংপ্পি

37

হ্যাঁ এটা করে. আসুন কেন তা বুঝতে দিন

এসকিউএলাইট লেনদেনের

এসকিউএলাইটে একক লেনদেনের মধ্যে সমস্ত পরিবর্তন হয় সম্পূর্ণরূপে হয় বা হয় না

তথাকথিত জার্নালিং ব্যবহার করে (এটিকে " পুরানো উপায় " বলতে দিন) বা লেখার আগে লগিং ব্যবহার করে (এটিকে " নতুন উপায়ে " বলুন) - এই জাতীয় এসিডি সমর্থন পাশাপাশি একই সাথে সমবর্তী পাঠ / লেখাগুলি সরবরাহ করা হয় ways

জার্নালিং (ওল্ড ওয়ে)

এই মোডে এসকিউএলাইট DATABASE-LEVEL লকিং ব্যবহার করে । এটি বোঝার জন্য গুরুত্বপূর্ণ বিষয়।

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

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

এ কারণেই তারা এখানে বলছেন যে এসকিউলেট সিরিয়ালাইজযোগ্য লেনদেন প্রয়োগ করে

ট্রাবলস

যেহেতু এটির জন্য প্রতিবার একটি সম্পূর্ণ ডাটাবেস লক করা দরকার এবং প্রত্যেকে লেখার সমঝোতা সহ্য করার প্রক্রিয়াটির জন্য অপেক্ষা করে এবং এই জাতীয় যুগপত লেখাগুলি / পড়া মোটামুটি কম পারফরম্যান্সের হয়

রোলব্যাক / বিভ্রাটের

ডাটাবেস ফাইলটিতে কিছু লেখার আগে এসকিউএলাইট প্রথমে অস্থায়ী ফাইলে পরিবর্তিত হওয়া অংশটি সংরক্ষণ করবে। ডাটাবেস ফাইলে লেখার মাঝামাঝি কিছু ক্র্যাশ হয়ে গেলে এটি এই অস্থায়ী ফাইলটি বেছে নেবে এবং এ থেকে পরিবর্তনগুলি ফিরিয়ে আনবে

লিখিত-এগিয়ে লগিং বা ওয়াল (নতুন উপায়)

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

ফলস্বরূপ, পাঠকরা লেখকদের সাথে প্রতিযোগিতা করেন না এবং ওল্ড ওয়েয়ের তুলনায় পারফরম্যান্স অনেক ভাল।

আদেশ সহকারে

এসকিউলাইট মূলত অন্তর্নিহিত ফাইল সিস্টেম লকিং কার্যকারিতার উপর নির্ভর করে তাই এটি সতর্কতার সাথে ব্যবহার করা উচিত, আরও বিশদ এখানে

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


34

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

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


আকর্ষণীয়, তবে কেবলমাত্র একটি একক মেশিনে কাজ করে, এমন দৃশ্যপটে নয় যেখানে ডেটাবেস অনভার নেটওয়ার্কে অ্যাক্সেস করা হয়।
ববুক

এটি উল্লেখ করার মতো বিষয় যে কোনও লেখকের জন্য অপেক্ষা করার জন্য ডিফল্ট সময়সীমাটি 5 সেকেন্ড এবং তার পরে database is lockedত্রুটি লেখক উত্থাপন করবেন
মিরোসেইন

16

2019 সালে, দুটি নতুন সমবর্তী লেখার বিকল্পগুলি এখনও প্রকাশিত হয়নি তবে পৃথক শাখায় উপলভ্য।

"PRAGMA জার্নাল_মোড = ওয়াল 2"

নিয়মিত "ওয়াল" মোডের ওপরে এই জার্নাল মোডের সুবিধা হ'ল লেখকরা অন্য ওয়াল ফাইলে লেখার জন্য চালিয়ে যেতে পারেন এবং অন্যটি পরীক্ষা করা হয়।

আরম্ভ করুন - বিস্তারিত ডকের লিঙ্ক

"ডিজিটাল ডাটাবেস" ওয়াল "বা" ওয়াল 2 "মোডে থাকলেও সিস্টেমটি এখনও কমিট কমান্ডকে সিরিয়াল করে দিলে বিগইন কনকরুরেন্ট বর্ধিতকরণ একাধিক লেখককে একযোগে লেখার লেনদেনের প্রক্রিয়া করতে দেয় although

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

তারা একসাথে সূচনা-সমবর্তী-ওয়াল 2 বা প্রতিটি পৃথক নিজস্ব শাখায় উপস্থিত রয়েছে


1
এই বৈশিষ্ট্যগুলি যখন প্রকাশ সংস্করণে প্রবেশ করবে তখন আমাদের কী ধারণা আছে? তারা সত্যিই আমার কাজে আসতে পারে।
পিটার মুর

2
কোন ধারনা নাই. আপনি শাখা থেকে সহজে নির্মিত হতে পারে। : .NET আমি নিম্নস্তরের ইন্টারফেস & WAL2 + + সঙ্গে একটি লাইব্রেরি শুরু সমবর্তী + + FTS5 আছে github.com/Spreads/Spreads.SQLite
ভিবি

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

2
এই থ্রেডটি দেখুন github.com/Expensify/Bedrock/issues/65 এবং সাধারণভাবে বেডরক। তারা এটিকে উত্পাদনে ব্যবহার করে এবং সেই জিনিসটিকে ঠেলে দেয় begin concurrent
ভিবি 13

13

এসকিউএলাইটের একটি পাঠক-লেখক ডাটাবেস স্তরে লক আছে । একাধিক সংযোগ (সম্ভবত বিভিন্ন প্রক্রিয়া দ্বারা মালিকানাধীন) একই সময়ে একই ডাটাবেস থেকে ডেটা পড়তে পারে, তবে কেবলমাত্র একজনই ডাটাবেসে লিখতে পারে।

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

পাঠক-লেখক লক স্বাধীন লেনদেন প্রক্রিয়াজাতকরণ সক্ষম করে এবং এটি ডাটাবেস স্তরে একচেটিয়া এবং ভাগ করা লকগুলি ব্যবহার করে প্রয়োগ করা হয়।

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

একযোগে লেখার ক্ষেত্রে বাস্তবায়নের বিশদ

এসকিউএলাইটের একটি লক টেবিল রয়েছে যা সর্বাধিক সম্মতি নিশ্চিত করার জন্য একটি লিখন অপারেশন চলাকালীন যতদূর সম্ভব ডেটাবেস লক করতে সহায়তা করে।

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

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

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

একাধিক SHARED টি লক একক RESERVED লক সহ সহাবস্থান করতে পারে তবে একক সময়ে কেবলমাত্র একটি রিসার্ভেড লক সক্রিয় থাকতে পারে। রিসার্ভেড লক থাকা অবস্থায় নতুন ভাগ করা লকগুলি পেন্ডিংয়ের থেকে আলাদা করা হয় ES - এসকিউএল সংস্করণ 3 @ এসকিউএলটি.আরজে ফাইল লকিং এবং কনকুরেন্সি

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

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

ডাটাবেস ফাইলে লেখার জন্য একটি এক্সক্লুসিভ লক প্রয়োজন। ফাইলটিতে কেবল একটি এক্সক্লুসিভ লক অনুমোদিত এবং কোনও প্রকারের অন্য কোনও লককে একটি এক্সক্লুসিভ লক সহ সহাবস্থান করার অনুমতি নেই। একযোগে সর্বাধিক করতে, এসকিউএলাইট বহিরাগত লকগুলি যে পরিমাণ সময় ধারণ করে তা হ্রাস করতে কাজ করে। - এসকিউএল সংস্করণ 3 @ এসকিউএলটি.আরজে ফাইল লকিং এবং কনকুরেন্সি

সুতরাং আপনি বলতে পারেন যে এসকিউএলাইট নিরাপদে একই ডিবিতে একাধিক প্রক্রিয়া লিখে সমবর্তী অ্যাক্সেস পরিচালনা করে কারণ এটি সমর্থন করে না! আপনি পাবেন SQLITE_BUSYবা SQLITE_LOCKEDদ্বিতীয় লেখক যখন এটি পুনরায় চেষ্টা সীমাবদ্ধতা হিট।


ধন্যবাদ. 2 জন লেখকের সাথে কোডের উদাহরণ এটি কীভাবে কাজ করে তা বোঝার জন্য দুর্দান্ত।
বাসজ

1
@ বাসজ সংক্ষেপে, বর্গক্ষেত্রের ডাটাবেস ফাইলে একটি পঠন-রাইটিং লক রয়েছে t এটি একই সাথে একটি ফাইল লিখুন। এবং ওয়াল এর সাথে, এখনও একযোগে লেখালেখি করতে পারে না, তবে ওয়াল লেখার গতি বাড়িয়ে তুলতে পারে, এবং পড়তে এবং লিখতে সমবর্তী হতে পারে nd
obgnaw

2
আপনি কি একটি সারি ব্যবহার করতে পারেন এবং কিউতে এসকিউএল স্টেটমেন্টগুলি ব্যবহার করে একাধিক থ্রেড কুই এবং কেবল একটি থ্রেড লিখন ডিবি-তে জমা করতে পারেন। ভালো কিছু এই
গ্যাব্রিয়েল

7

এই থ্রেডটি পুরাতন তবে আমি মনে করি স্ক্লাইটে আমার পরীক্ষাগুলির ফলাফল ভাগ করে নেওয়া ভাল হবে: আমি পাইথন প্রোগ্রামের 2 টি দৃষ্টান্ত দৌড়েছি (বিভিন্ন প্রক্রিয়া একই প্রোগ্রাম) বিবৃতিগুলি সম্পাদন করে এক্সক্লুসিভ লক এবং সময়সীমা নির্ধারণের সাথে লেনদেনের মধ্যে এসকিএল কমান্ডগুলি নির্বাচন করুন একটি লক পেতে 10 সেকেন্ড, এবং ফলাফল হতাশ ছিল। প্রতিটি উদাহরণ 10000 পদক্ষেপ লুপে করেছে:

  • একচেটিয়া লক দিয়ে ডিবি সংযোগ করুন
  • কাউন্টার পড়তে এক সারিতে নির্বাচন করুন
  • 1 দ্বারা বর্ধিত কাউন্টারের সমান নতুন মান সহ সারি আপডেট করুন
  • ডিবি সাথে সংযোগ

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


5
দেখে মনে হচ্ছে আপনি, যেমন এখানে আলোচনা অর্ডার পাইথন একটি লক পেতে কিছু জাদু শব্দ বলতে প্রয়োজন: stackoverflow.com/a/12848059/1048959 আসলে পাইথন SQLite ডকুমেন্টেশন বিশালাকার আপনি বিশ্বাস করতে যে সত্ত্বেও এই with conযথেষ্ট।
ড্যান স্টাহলকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.