TeaTime - ระบบห้องสมุดแบบกระจายศูนย์ที่ขับเคลื่อนด้วย SQLite, IPFS และ GitHub
(github.com/bjesus)- ระบบห้องสมุดแบบกระจายศูนย์เชิงสถิติโดยสมบูรณ์ที่สร้างบน IPFS, SQLite และ GitHub
- สามารถโฮสต์อินสแตนซ์ที่อัปเดตอัตโนมัติบน Netlify และ GitHub Pages ได้
ห้องสมุดแบบกระจายศูนย์
- เว็บแอปพลิเคชัน TeaTime แยกออกจากฐานข้อมูลและไฟล์ที่ดึงมาใช้อย่างสมบูรณ์
- ฐานข้อมูลที่ใช้คือ GitHub repository ที่ติดแท็กหัวข้อ teatime-database และเผยแพร่บน GitHub Pages
- แต่ละ repository มีไฟล์ config.json ที่ชี้ไปยังฐานข้อมูล SQLite
- ก่อนที่ผู้ใช้จะค้นหา จะต้องเลือกฐานข้อมูลที่จะใช้ และ TeaTime จะ query ฐานข้อมูล SQLite ด้วย sql.js-httpvfs
- แต่ละแถวในฐานข้อมูล SQLite คือรายการหนึ่งในห้องสมุด และคอลัมน์ file hash จะถูกใช้เพื่อดึงรายการจาก IPFS
- เนื่องจากเว็บแอปเป็น static site และฐานข้อมูลประกอบด้วยไฟล์แบบสถิติจึงสามารถ fork, clone และ deploy ได้ง่าย
- อินสแตนซ์ฝั่งฟรอนต์เอนด์คือ GitHub repository ที่ติดแท็กหัวข้อ teatime-instance
- เนื่องจากไฟล์ถูกให้บริการผ่าน IPFS สถาปัตยกรรมแบบกระจายนี้จึงช่วยเพิ่มความทนทานของ TeaTime
ฟีเจอร์
- ค้นหาได้ตามชื่อเรื่อง ผู้แต่ง ปี หรือรูปแบบ
- เก็บประวัติการอ่านและกลับไปยังหน้าที่ค้างไว้เมื่อเปิดไฟล์อีกครั้ง
- ดาวน์โหลดไฟล์ลงเครื่อง
- แคชไฟล์ใน IndexedDB เพื่อการโหลดที่รวดเร็ว
- ลากไฟล์มาวางใน TeaTime เพื่อเรนเดอร์
- โหมดมืดและโหมดเต็มหน้าจอ
- ไม่มีคุกกี้ ไม่มีการล็อกอิน
- กระจายศูนย์อย่างสมบูรณ์
การพัฒนาฟรอนต์เอนด์
- TeaTime เป็นแอปพลิเคชัน Nuxt.js
- รันบนเครื่องโลคัลได้ง่าย: clone repository แล้วทำตามขั้นตอนต่อไปนี้
- ติดตั้ง dependency:
npm install - รันเซิร์ฟเวอร์:
npm run dev - ไปที่
http://localhost:3000
- ติดตั้ง dependency:
- ดูข้อมูลเพิ่มเติมได้ในเอกสารของ Nuxt
การสร้างฐานข้อมูล
- สามารถสร้างฐานข้อมูลได้โดย fork repository ฐานข้อมูลแบบ JSON และปรับไฟล์ JSON ให้ตรงกับความต้องการ
- GitHub Actions จะสร้างไฟล์ SQLite และอัปโหลดไปยัง GitHub Pages
- หากต้องการสร้างฐานข้อมูล SQLite ที่ทำงานร่วมกับ TeaTime ได้ด้วยตนเอง ให้ทำตามตัวอย่างใน repository ฐานข้อมูล
- แต่ละฐานข้อมูล SQLite จะมีตารางตาม schema ด้านล่าง และสามารถปรับชื่อคอลัมน์ได้ในไฟล์
config.jsonCREATE TABLE "books" ( "id" INTEGER, "title" TEXT, "author" TEXT, "year" INTEGER, "lang" TEXT, "size" INTEGER, "ext" TEXT, "ipfs_cid" TEXT, PRIMARY KEY("id" AUTOINCREMENT) ); - หากไฟล์ SQLite มีขนาดใหญ่เกินไปก็สามารถแบ่งย่อยได้ ควรดูข้อมูลเกี่ยวกับการปรับแต่งประสิทธิภาพฐานข้อมูล และแนะนำให้ใช้ FTS
- เผยแพร่ repository บน GitHub Pages และกำหนดหัวข้อ
teatime-databaseให้กับ repository
การมีส่วนร่วม
- แม้จะเขียนโค้ดไม่ได้ก็ยังมีส่วนร่วมได้ด้วยการ fork repository นี้และ repository ฐานข้อมูลที่คุณชื่นชอบ
- เมื่อต้อง fork repository แนะนำให้ fork แบบ manual เพื่อไม่ให้เชื่อมโยงกันโดยตรง (
git clone&&git remote add your-origin ...&&git push your-origin main) - การกดดาวให้ repository ฐานข้อมูลที่มีประโยชน์ก็เป็นอีกวิธีที่ดี เพราะสิ่งนี้ใช้กำหนดลำดับของฐานข้อมูลในอินเทอร์เฟซผู้ใช้ของ TeaTime เพื่อให้ผู้ใช้อื่นค้นหาฐานข้อมูลที่ดีที่สุดได้ง่ายขึ้น
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผู้มีส่วนร่วมกับ IPFS เสนอแนวทางที่อาจปรับปรุงวิธีจัดการการดาวน์โหลดจากหลายเกตเวย์บน IPFS ได้
@helia/verified-fetchสามารถรับ CID ผ่าน API ที่คล้ายกับ Fetch และจัดการ content routing กับการค้นหาแบบ P2P ได้เฟรมเวิร์ก Pear P2P อาจช่วยให้ย้ายออกจาก GitHub ไปสู่ระบบกระจายศูนย์อย่างแท้จริงได้
กำลังพิจารณาใช้ Helia เพื่อให้ผู้ใช้สามารถมีส่วนร่วมเป็นโหนดของเครือข่ายได้
มีปัญหาถูกบล็อกเมื่อเข้าถึงทรัพยากรบางอย่างเนื่องจากนโยบาย CORS
no-corsเพื่อปิดการทำงานของ CORSทุกอย่างทำงานอยู่ในเบราว์เซอร์ทั้งหมด และไม่มีผู้ใช้ คุกกี้ หรือการติดตาม
ฐานข้อมูลที่ใช้ใน TeaTime คือที่เก็บ GitHub ซึ่งเผยแพร่บน GitHub Pages
เพราะไม่รู้ว่ามีอะไรอยู่ในฐานข้อมูล จึงไม่รู้ว่าควรค้นหาอะไร
มีคำถามว่าสามารถใช้อินสแตนซ์ตัวอย่างได้หรือไม่
สงสัยว่าสามารถรวมบุ๊กมาร์กของ Pocket ได้หรือไม่