4 คะแนน โดย xguru 2023-07-07 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ระบบที่เก็บฐานข้อมูล SQLite ไว้บนคลาวด์สตอเรจ และทำให้อ่านและเขียนได้โดยไม่ต้องดาวน์โหลดทั้งฐานข้อมูลทั้งหมด
    • ปัจจุบันรองรับ Azure Blob Storage และ Google Cloud Storage
  • ใช้โมดูล Block Cache VFS: ทำงานได้ในโหมด daemonless (อ่าน/เขียน) และโหมด daemon (อ่านอย่างเดียว)

สิ่งที่ GN⁺ สรุปไว้

  • ระบบ "Cloud Backed SQLite" (CBS) เก็บฐานข้อมูลไว้ในบัญชีคลาวด์สตอเรจ และอนุญาตให้ไคลเอนต์ของสตอเรจเข้าถึงได้โดยไม่ต้องดาวน์โหลดฐานข้อมูลทั้งหมด
  • ไคลเอนต์หลายตัวสามารถเข้าถึงฐานข้อมูลพร้อมกันได้ แต่มีเพียงไคลเอนต์ตัวเดียวเท่านั้นที่สามารถเขียนลงฐานข้อมูลได้
  • ขณะนี้ CBS รองรับ Azure Blob Storage และ Google Cloud Storage และอาจรองรับระบบคลาวด์สตอเรจอื่น ๆ ได้ด้วย
  • ฐานข้อมูล SQLite จะถูกแบ่งเป็นบล็อกขนาดคงที่และเก็บไว้ในระบบคลาวด์สตอเรจ
  • ระบบนี้ประกอบด้วยองค์ประกอบพื้นฐานสำหรับจัดการคอนเทนเนอร์คลาวด์สตอเรจ, โปรเซสเดมอนที่ให้การเข้าถึงฐานข้อมูลระยะไกลแบบโลคัล, และโมดูล VFS สำหรับเข้าถึงฐานข้อมูลบนคลาวด์
  • หากต้องการใช้ CBS แอปพลิเคชันต้องบิลด์และลิงก์ไฟล์ C และเฮดเดอร์ไฟล์ที่จำเป็น รวมถึงลิงก์กับ libcurl และ openssl
  • ระบบสามารถทดสอบได้ด้วยชุดทดสอบอัตโนมัติ
  • สามารถอัปโหลดฐานข้อมูลไปยังบัญชีคลาวด์สตอเรจได้ด้วยเครื่องมือบรรทัดคำสั่ง
  • ในการเข้าถึงฐานข้อมูลที่เก็บไว้บนคลาวด์สตอเรจ ต้องสร้าง VFS, เชื่อมต่อคอนเทนเนอร์, เปิดแฮนเดิลฐานข้อมูล และรันสคริปต์ SQL
  • ระบบมี API สำหรับรองรับระบบคลาวด์สตอเรจใหม่ ๆ และสำหรับอิมพลีเมนต์ virtual table
  • บทความนี้กล่าวถึงการใช้คอนเทนเนอร์แบบปลอดภัยในระบบคลาวด์สตอเรจ
  • คอนเทนเนอร์สามารถเชื่อมต่อได้ทั้งแบบปลอดภัยและไม่ปลอดภัย โดยการเชื่อมต่อแบบปลอดภัยจะเข้ารหัสข้อมูลด้วย AES OFB
  • ไคลเอนต์ภายในเครื่องต้องมีข้อมูลรับรองคลาวด์สตอเรจที่ถูกต้องเพื่อรับคีย์เข้ารหัสจากโปรเซสเดมอน
  • บทความนี้กล่าวถึงโมดูลในตัว azure และ google สำหรับระบบคลาวด์สตอเรจ
  • CBS API และเครื่องมือบรรทัดคำสั่งต้องใช้ข้อกำหนดของโมดูล ชื่อผู้ใช้ และค่าการยืนยันตัวตน
  • บทความนี้ให้รายละเอียดของโมดูล azure และวิธีสร้าง SAS token สำหรับการยืนยันตัวตน
  • โมดูล google ต้องใช้ project ID และ access token เพื่อเชื่อมต่อ CBS กับ Google Cloud Storage
  • บทความนี้กล่าวถึงการเข้าถึงพร้อมกันจากไคลเอนต์หลายตัว และความจำเป็นในการ polling คอนเทนเนอร์เพื่อตรวจสอบการเปลี่ยนแปลง
  • Blockcachevfs รองรับคำสั่ง PRAGMA สามรายการคือ bcv_upload, bcv_poll และ bcv_client
  • อินเทอร์เฟซ virtual table ประกอบด้วยตาราง bcv_container และ bcv_database
  • ตาราง bcv_container มีข้อมูลเกี่ยวกับคอนเทนเนอร์ที่เชื่อมต่ออยู่ และตาราง bcv_database มีข้อมูลเกี่ยวกับฐานข้อมูลของแต่ละคอนเทนเนอร์
  • บทความนี้กล่าวถึงโครงสร้างและหน้าที่ของตารางต่าง ๆ ในฐานข้อมูล blockcachevfs
  • ตาราง bcv_database มีข้อมูลเกี่ยวกับการเปลี่ยนแปลงในเครื่องของฐานข้อมูล
  • ตาราง bcv_http_log บันทึกคำขอ HTTP ที่ดำเนินการโดย VFS หรือเดมอนที่เชื่อมต่ออยู่
  • ตาราง bcv_kv ช่วยให้แอปพลิเคชันสามารถเขียนข้อมูลลงในคอนเทนเนอร์คลาวด์สตอเรจได้
  • ตาราง bcv_kv_meta ให้การเข้าถึงแบบอ่านอย่างเดียวต่อ HTTP header ของเซิร์ฟเวอร์คลาวด์สตอเรจ
  • บทความนี้ยังมีข้อมูลอ้างอิงคำสั่งบรรทัดคำสั่งสำหรับการทำงานต่าง ๆ ในฐานข้อมูล blockcachevfs
  • คำสั่งเดมอนทำให้โปรเซส blockcachevfsd ทำงานเป็นเซิร์ฟเวอร์และรับการเชื่อมต่อจากไคลเอนต์ได้
  • โปรเซสเดมอนรองรับตัวเลือกหลากหลายสำหรับการตั้งค่าและการบันทึกล็อก

1 ความคิดเห็น

 
GN⁺ 2023-07-07
ความเห็นจาก Hacker News
  • แชร์ประสบการณ์ของนักพัฒนาที่ให้บริการฐานข้อมูล SQLite ขนาดใหญ่แบบแบ่งเป็นชังก์ และคิวรีผ่าน HTTP range requests
  • กล่าวถึงไลบรารีชื่อ sql.js-httpvfs ที่ช่วยในกระบวนการนี้
  • นักพัฒนาได้แบ่งฐานข้อมูล SQLite ขนาด 350MB ออกเป็นชิ้นเล็ก ๆ และอัปโหลดขึ้น GitHub
  • แนะนำให้ลองดูโปรเจกต์และทดสอบในแท็บ console และ network
  • ผู้แสดงความเห็นอีกรายตั้งข้อกังวลเกี่ยวกับความสอดคล้องของแคช, concurrency, การขัดข้องของเครือข่าย และปัญหาการยืนยันตัวตน เมื่อต้องใช้ที่เก็บข้อมูลระยะไกล
  • เสนอทางแก้ที่ง่ายกว่าคือคัดลอกฐานข้อมูลไปยังระบบไฟล์ tmpfs เป็นระยะ และคัดลอกไปยัง object storage
  • เน้นข้อดี เช่น การแก้ปัญหา, การคัดลอกไฟล์ที่ถูกและเร็ว, ไม่ต้องมี external daemon, global lock แบบง่าย, thread safety, ไม่มีการขัดข้องของเครือข่าย และการยืนยันตัวตนภายนอก
  • ผู้แสดงความเห็นอีกรายตั้งคำถามว่าทำไมต้องนำ SQLite ซึ่งเป็นฐานข้อมูลแบบ embedded ไปใช้งานเป็นบริการคลาวด์ ในเมื่อ PostgreSQL ก็แก้ปัญหาเดียวกันนี้ได้อยู่แล้ว
  • อ้างว่าการย้ายที่เก็บข้อมูลไปไว้บนคลาวด์จะทำให้ latency และความเรียบง่ายแย่ลง
  • ผู้แสดงความเห็นอีกรายถามว่า SQLite มีคำสั่งที่เทียบเท่ากับ pg_dump และ mysqldump หรือไม่
  • มีการกล่าวว่าระบบรองรับ Azure Blob Storage และ Google Cloud Storage อยู่ในปัจจุบัน และ AWS อาจถูกยกเว้น
  • ผู้แสดงความเห็นอีกรายไม่แน่ใจว่านี่เป็นฟีเจอร์ที่รองรับอย่างเป็นทางการ หรือเป็นเพียงสถานการณ์แบบ "ในทางเทคนิคทำได้"
  • สงสัยว่าสามารถรัน Datasette กับ external cloud storage ได้หรือไม่
  • ผู้แสดงความเห็นอีกรายแสดงความกังวลเรื่องการรับประกันว่าในช่วงเวลาเดียวกันจะมีไคลเอนต์เพียงรายเดียวที่เขียนลงฐานข้อมูล
  • กล่าวว่าชั้น VFS ของ SQLite มีความยืดหยุ่นและใช้งานได้ง่ายสำหรับการทำ object storage บนคลาวด์
  • กล่าวว่าการทำแคชอาจเป็นด้านที่ยุ่งยากของการติดตั้งใช้งาน
  • ผู้แสดงความเห็นอีกรายรู้สึกสับสนกับแนวคิดการใช้ SQLite บนคลาวด์แทนที่จะใช้ฐานข้อมูลเชิงสัมพันธ์ตัวอื่น เพราะ SQLite เดิมถูกออกแบบมาสำหรับการใช้งานแบบโลคัล