প্রকল্প সম্পর্কে

tinySQL হলো Go-তে লেখা একটি এমবেডযোগ্য SQL ডেটাবেস ইঞ্জিন, যা ডেটাবেসের অভ্যন্তরীণ কাঠামো শেখা, লোকাল টুল, টেস্ট, ব্রাউজার/WASM অ্যাপ্লিকেশন এবং ডেটাবেস সার্ভার চালানো ছাড়াই SQL প্রয়োজন এমন সিঙ্গল-প্রসেস সার্ভিসের জন্য উপযোগী। এটি PostgreSQL, MySQL বা ক্লাস্টারড প্রোডাকশন ডেটাবেসের ড্রপ-ইন রিপ্লেসমেন্ট নয়। ## শুরু করা Go 1.26.5+ প্রয়োজন। `go get github.com/SimonWaldherr/tinySQL@latest` দিয়ে ইনস্টল করুন। একটি ইন-মেমরি ডেটাবেস তৈরি করুন এবং সহজ Go API দিয়ে SQL চালান, যার মধ্যে `?`, `$1`, বা `:1` প্লেসহোল্ডার দিয়ে প্যারামিটার বাইন্ডিং অন্তর্ভুক্ত। একটি database/sql ড্রাইভার, স্ট্রিমিং, কলামনার ফলাফল, ট্রানজ্যাকশন এবং একটি কোয়েরি বিল্ডারও পাওয়া যায়। একই ইঞ্জিন একটি C ABI-এর মাধ্যমে অন্য ভাষায় এমবেড হয়, যেখানে Rust, Python, Swift এবং C-এর জন্য বাইন্ডিং রয়েছে। Python ও Rust উদাহরণে টেবিল তৈরি, সারি ইনসার্ট এবং বাউন্ড প্যারামিটার দিয়ে কোয়েরি দেখানো হয়েছে। ## ওয়ার্কফ্লো - ইন্টারঅ্যাকটিভ এক্সপ্লোরেশন: demo, repl, বা tinysql CLI - কোয়েরি ফাইল বা ডেটা মাইগ্রেশন: query_files, fsql, বা migrate - লোকাল SQL সার্ভিস এমবেড করা: server বা tinysqld - ব্রাউজার অ্যাপ তৈরি: query_files_wasm, wasm_browser, বা wasm_node - Swift/Xcode অ্যাপে এমবেড করা: macOS, iOS, iPadOS-এর জন্য Swift প্যাকেজ এবং Apple XCFramework - AI টুলিং বা লোকাল RAG ব্যবহার: tinysql-mcp-server এবং RAG গাইড ## সক্ষমতা - **SQL**: DDL/DML, CTE, জয়েন, গ্রুপিং, উইন্ডো, ভিউ, ট্রিগার, টেবিল-ভ্যালুড ফাংশন, স্টোরড প্রোসিডিউর, জব এবং সাধারণ SQLite-সামঞ্জস্যপূর্ণ PRAGMA - **ডেটা**: CSV/TSV, JSON/NDJSON, XML, YAML, Excel, GeoJSON, TopoJSON, KML, OSM XML, রাউটিং গ্রাফ, Shapefile, GeoPackage, MBTiles - **সার্চ**: ফুল-টেক্সট, ভেক্টর, হাইব্রিড সার্চ, RAG হেল্পার, regex, JSON, URL, HTML, date, math, bitmap এবং hash ফাংশন - **ডিপ্লয়মেন্ট**: পিউর-Go এমবেডেড API, database/sql ড্রাইভার, Rust/Python/Swift/C বাইন্ডিং, CLI, HTTP/gRPC সার্ভার, ব্রাউজার/WASM বিল্ড, একাধিক স্টোরেজ ব্যাকএন্ড ## GIS, রাউটিং এবং টাইল জ্যামিতি GeoJSON বা ভ্যালিডেটেড GEOMETRY হিসেবে সংরক্ষিত হয়। এতে মেজারমেন্ট, প্রেডিকেট, এডিটিং, স্পেশিয়াল সার্চ, choropleth ক্লাসিফিকেশন, WKT/WKB, geohash এবং Web Mercator হেল্পার অন্তর্ভুক্ত। রাউটিং ফাংশন সাধারণ এজ টেবিলের উপর Dijkstra বা কোঅর্ডিনেট-গাইডেড A* চালায়। টাইল ফাংশন Web Mercator এবং OGC TileMatrix ওয়ার্কফ্লো সমর্থন করে। ## রিট্রিভাল এবং RAG ভেক্টর, ফুল-টেক্সট এবং হাইব্রিড রিট্রিভাল মেটাডেটা ফিল্টার ও রির‍্যাংকিংয়ের সাথে একত্রিত করা যায়। RAG_WARM এবং ROUTE_WARM ট্রাফিকের আগে ডিরাইভড সার্ভিং স্ট্রাকচার প্রস্তুত করে। ## স্টোরেজ মোড - ModeMemory: টেস্ট, ব্রাউজার/WASM, অস্থায়ী ডেটা - ModeWAL: write-ahead-log রিকভারিসহ ইন-মেমরি টেবিল - ModeDisk: lazy লোডিংসহ প্রতি-টেবিল GOB ফাইল - ModeJSON: মানুষের-পাঠযোগ্য, diffable প্রতি-টেবিল JSON - ModeIndex/ModeHybrid: সীমাবদ্ধ ক্যাশিংসহ ডিস্ক-ব্যাকড টেবিল - ModePagedIndex: MBTiles-এর মতো বড় equality লুকআপ - ModeSQLite: .sqlite ফাইল, SQLite টুলের সাথে ইন্টারঅপারেবল (sqliteimport ট্যাগ প্রয়োজন) ঐচ্ছিক ফাইল সাপোর্ট বিল্ড ট্যাগ দিয়ে তৈরি হয়: SQLite/GeoPackage/MBTiles-এর জন্য `sqliteimport`, ESRI Shapefile/ZIP ইমপোর্টের জন্য `shapefile`। একটি `tinysql_minimal` ট্যাগ আকার-সংবেদনশীল এমবেডিং যেমন ব্রাউজার WASM বান্ডেলের জন্য ঐচ্ছিক ফিচার বাদ দেয়, যা stripped symbols-সহ wasm-opt-এর আগে বান্ডেল প্রায় 27.46 MB থেকে 15.56 MB (43%)-এ কমায়। ## সার্ভিস এবং অপারেশন server HTTP ও gRPC API, ঐচ্ছিক TLS ও bearer authentication, এবং অ্যাসিনক্রোনাস রিড-ওনলি রেপ্লিকা প্রদান করে। tinysqld হলো ডিউরেবল DBMS এন্ট্রি পয়েন্ট, যেখানে health, scheduler এবং ঐচ্ছিক টাইল এন্ডপয়েন্ট রয়েছে। রেপ্লিকেশন অ্যাসিনক্রোনাস; স্বয়ংক্রিয় ফেইলওভার, মাল্টি-প্রাইমারি রাইট এবং ডিস্ট্রিবিউটেড ট্রানজ্যাকশন বাস্তবায়িত নয়। ## সীমাবদ্ধতা - এমবেডেড ও সিঙ্গল-প্রসেস; সার্ভার শুধু অ্যাসিনক্রোনাস প্রাইমারি/রেপ্লিকা রিড দেয় - কম্পোজিট প্রাইমারি/ফরেন কী, CHECK, টার্গেট-বহনকারী ON CONFLICT DO UPDATE, SAVEPOINT, ATTACH/DETACH, VACUUM, partial index, generated column এবং persistent ANN index ফাইল পাওয়া যায় না - সেকেন্ডারি ইনডেক্স equality/prefix seek এবং numeric range দ্রুত করে; ইনডেক্সড পয়েন্ট-কলাম bbox/radius কোয়েরির জন্য GEO_SEARCH প্রয়োজন - GIS ভ্যালিডিটি সম্পূর্ণ টপোলজি ভ্যালিডেশনের বদলে স্ট্রাকচারাল; GEO_DISSOLVE/GEO_UNION_AGG-এর জন্য পরিষ্কার, vertex-aligned সংলগ্ন পলিগন প্রয়োজন - RBAC মোটামুটি এবং সিঙ্গল-টেবিল-কেন্দ্রিক; এনক্রিপশন WAL-ব্যাকড মোড বা মেটাডেটা ফাইল কভার করে না tinySQL মূলত একটি শিক্ষামূলক ও এমবেডযোগ্য ইঞ্জিন, যা পার্সার, প্ল্যানার, এক্সিকিউটর, স্টোরেজ ব্যাকএন্ড এবং ব্যবহারিক এক্সটেনশনগুলো পরিদর্শন, টেস্ট ও অভিযোজনের জন্য সহজ রাখে।