ইরাক ভাইয়া, আপনার প্রশ্নগুলো অত্যন্ত সময়োপযোগী ও গভীর টেকনিক্যাল অন্তর্দৃষ্টিসম্পন্ন। ৪টি প্যারালাল ওয়ার্কার দিয়ে কাজ করাতে গেলে ডাটাবেজ হ্যান্ডলিং, লকিং সমস্যা, টেমপ্লেট ও এসইও কনসিস্টেন্সি কীভাবে শতভাগ সুরক্ষিত রাখা হবে—তার পুঙ্খানুপুঙ্খ প্রযুক্তিগত বিশ্লেষণ ও সমাধান নিচে তুলে ধরছি: --- ### [ ✦ ডাটাবেজ কনকারেন্সি ও লকিং ] #### ১. SQL কি ৪টি ওয়ার্কারের একযোগে ইনসার্ট সাপোর্ট করে? *সরাসরি SQLite ফাইলে ৪টি আলাদা প্রসেস যদি একই মিলি-সেকেন্ডে `COMMIT` চালাতে যায়, তবে `database is locked` এরর আসবে।* ◈ কারণ SQLite মূলত একটি সিঙ্গেল-ফাইল ডাটাবেজ এবং রাইটিংয়ের সময় এটি ডাটাবেজ লেভেলে এক্সক্লুসিভ লক নেয়। #### ২. ডাটাবেজ কি আলাদা ভাগ (Split) করতে হবে? *কখনোই না! ডাটাবেজ আলাদা পার্ট বা একাধিক ফাইলে বিভক্ত করা কঠোরভাবে নিষিদ্ধ।* ◈ ডাটাবেজ স্প্লিট করলে টেবিলগুলোর রিলেশনাল ইন্টিগ্রিটি নষ্ট হবে: `elements` ➔ `ideas` ➔ `prompts` ➔ `tasks` ➔ `youtube_metadata` ➔ `publishing` ◈ পরবর্তীতে ৪টি আলাদা ডাটাবেজ ফাইল মার্জ করা অসম্ভব জটিল এবং আইডি কনফ্লিক্ট ও ডাটা হারিয়ে যাওয়ার বড় ঝুঁকি তৈরি করবে। --- ### [ ❖ মূল সমাধান: সেন্ট্রালাইজড ডিবি আর্কিটেকচার ] ডকার কন্টেইনারগুলো ডাটাবেজ নিয়ে সরাসরি কাজ করবে **না**। এগুলো সম্পূর্ণ **Stateless LLM Compute Worker (Microservices)** হিসেবে কাজ করবে: ``` [ ৪টি ডকার ওয়ার্কার (ChatGPT Sessions) ] Worker 1 (Port 8001) ──┐ Worker 2 (Port 8002) ──┼──► [ Host Dispatcher ] Worker 3 (Port 8003) ──┤ │ Worker 4 (Port 8004) ──┘ ▼ [ In-Memory Queue ] │ ▼ (একক সুশৃঙ্খল রাইটার) [ youtube_pipeline.db ] ``` #### এটি কীভাবে কাজ করবে? ১. **ডকার ওয়ার্কারের কাজ শুধু জেনারেশন:** কন্টেইনারগুলো শুধুমাত্র HTTP POST এর মাধ্যমে প্রম্পট টেক্সট নেবে এবং চ্যাটজিপিটি থেকে আউটপুট এনে হোস্টকে ফেরত দেবে (প্রতিটি প্রম্পট জেনারেট হতে ২০ থেকে ৭৫ সেকেন্ড সময় লাগে)। ২. **হোস্ট সেন্ট্রালাইজড রাইটার থ্রেড (Single DB Writer):** হোস্টের পাইথন স্ক্রিপ্টে একটি `queue.Queue` থাকবে। ৪টি ওয়ার্কার থেকে যখনই রেসপন্স আসবে, তা কিউতে জমা হবে। ৩. **মিলি-সেকেন্ডে কমিট (Zero Lock):** ডিবি রাইটার কিউ থেকে ডাটা নিয়ে একের পর এক `youtube_pipeline.db`-তে ইনসার্ট করবে। যেহেতু ডাটাবেজে ইনসার্ট হতে মাত্র ৩-৫ মিলি-সেকেন্ড লাগে, তাই ৪টি প্রসেসের মাঝে কোনো লক কনফ্লিক্ট থাকবে না। ৪. **WAL মোড ও প্রাগমা টাইমআউট:** ডাটাবেজে `PRAGMA journal_mode=WAL;` এবং `PRAGMA busy_timeout=60000;` সক্রিয় থাকবে, ফলে যেকোনো রিড/রাইট সম্পূর্ণ মসৃণ হবে। --- ### [ ⚡ টেমপ্লেট, এসকেলেশন ও SEO কনসিস্টেন্সি ] সব ওয়ার্কার যাতে আপনার অফিশিয়াল মাস্টার রুলস ও টেমপ্লেট হুবহু মেনে চলে, তা নিচের আর্কিটেকচার দিয়ে নিশ্চিত করা আছে: #### ১. সেন্ট্রালাইজড প্রম্পট স্টাইল মাস্টার: ডাটাবেজের `prompting_style_master` টেবিলে অফিশিয়াল মাস্টার টেমপ্লেটগুলো সক্রিয় (Active) রয়েছে: ◈ **আইডিয়া জেনারেশন:** `STAGE_2_IDEA_GENERATION` (Version 3.1 — Schema-Grounded DNA)। ◈ **১০-লেভেল এসকেলেশন:** `STAGE_3_PROMPT_ESCALATION_MASTER` (Version 5 — Core Invariant from Level 1 to 10)। ◈ **ইউটিউব এসইও:** `STAGE_6_YOUTUBE_METADATA` (Version 2 — Evidence-Grounded SEO & Packaging)। #### ২. টেমপ্লেট ব্যবহারের ফ্লো: ◈ হোস্ট ডিসপ্যাচার ডাটাবেজ থেকে অ্যাক্টিভ টেমপ্লেট টেনে আনবে এবং এলিমেন্ট বা আইডিয়ার তথ্য বসিয়ে পূর্ণাঙ্গ প্রম্পট তৈরি করবে। ◈ তৈরি হওয়া সেই অফিশিয়াল প্রম্পটটি যে ডকার ওয়ার্কার ফ্রি থাকবে তাকে পাঠানো হবে। ◈ ফলে ৪টি ডকার ওয়ার্কারের সেশন ভিন্ন হলেও প্রত্যেকে **হুবহু একই মাস্টার টেমপ্লেট, স্টাইল গাইড এবং এসকেলেশন ফর্মুলা** এক্সিকিউট করবে। #### ৩. DLIP স্ক্র্যাপ ও এসইও প্যাকেজিং: ◈ প্রম্পট ও আইডিয়া জেনারেশন শেষ হলে পাইপলাইনের স্বাভাবিক নিয়মে DLIP স্ক্র্যাপ/ইনজেশন চলবে। ◈ এরপর `STAGE_6_YOUTUBE_METADATA` টেমপ্লেটের মাধ্যমে টাইটেল, ডেসক্রিপশন, ট্যাগ এবং হ্যাশট্যাগ তৈরি হয়ে সরাসরি প্যাকেজ ফোল্ডারে চলে যাবে। --- ### [ 💎 সারসংক্ষেপ ] ১. **ডাটাবেজ থাকবে একটাই:** কোনো স্প্লিট বা বিভাজন ছাড়াই একক `youtube_pipeline.db` সংরক্ষিত থাকবে। ২. **লকহীন মাল্টি-থ্রেডিং:** ডকার কন্টেইনারগুলো ডাটাবেজ স্পর্শ করবে না; হোস্টের সিঙ্গেল কিউ রাইটার দিয়ে নিরাপদে ইনসার্ট হবে। ৩. **মাস্টার প্রম্পট ইনভ্যারিয়েন্ট:** আইডিয়া, ১০-লেভেল এসকেলেশন এবং এসইও টেমপ্লেট শতভাগ ডাটাবেজের অ্যাক্টিভ রুলস অনুযায়ীই ৪টি ওয়ার্কারে কাজ করবে। এই টেকনিক্যাল আর্কিটেকচার অনুযায়ী ডিসপ্যাচার ও পাইপলাইন স্ক্রিপ্ট ইন্টিগ্রেশনের কাজ শুরু করতে চাইলে নির্দেশ দিন, সাথে সাথে কোড প্রস্তুত করে রান করে দেব।