TeaTime - Hệ thống thư viện phân tán chạy trên SQLite, IPFS và GitHub
(github.com/bjesus)- Hệ thống thư viện phân tán tĩnh hoàn toàn dựa trên IPFS, SQLite và GitHub
- Có thể lưu trữ các instance được tự động cập nhật trên Netlify và GitHub Pages
Thư viện phân tán
- Ứng dụng web TeaTime được tách biệt hoàn toàn khỏi cơ sở dữ liệu và các tệp mà nó truy xuất.
- Cơ sở dữ liệu được sử dụng là kho lưu trữ GitHub có gắn chủ đề teatime-database, được xuất bản trên GitHub Pages.
- Mỗi kho lưu trữ bao gồm một tệp
config.jsontrỏ đến cơ sở dữ liệu SQLite. - Trước khi người dùng thực hiện tìm kiếm, họ chọn cơ sở dữ liệu sẽ dùng và TeaTime truy vấn cơ sở dữ liệu SQLite bằng
sql.js-httpvfs. - Mỗi hàng trong cơ sở dữ liệu SQLite là một mục của thư viện, và cột băm tệp được dùng để lấy mục đó từ IPFS.
- Vì ứng dụng web là một trang tĩnh và cơ sở dữ liệu được cấu thành từ các tệp tĩnh, nên có thể dễ dàng fork, sao chép và triển khai.
- Instance frontend là một kho lưu trữ GitHub có gắn chủ đề teatime-instance.
- Vì các tệp được phân phối từ IPFS, kiến trúc phân tán này làm tăng khả năng phục hồi của TeaTime.
Tính năng
- Có thể tìm kiếm theo tiêu đề, tác giả, năm hoặc định dạng
- Duy trì lịch sử đọc và quay lại đúng trang khi mở lại tệp
- Tải tệp về máy cục bộ
- Cache tệp trong IndexedDB để tải nhanh hơn
- Kéo thả tệp vào TeaTime để render
- Chế độ tối và chế độ toàn màn hình
- Không cookie, không đăng nhập
- Hoàn toàn phân tán
Phát triển frontend
- TeaTime là một ứng dụng Nuxt.js.
- Có thể chạy cục bộ dễ dàng: clone kho lưu trữ rồi thực hiện các bước sau
- Cài đặt phụ thuộc:
npm install - Chạy máy chủ:
npm run dev - Truy cập
http://localhost:3000
- Cài đặt phụ thuộc:
- Có thể tham khảo tài liệu Nuxt để biết thêm thông tin
Tạo cơ sở dữ liệu
- Có thể tạo cơ sở dữ liệu bằng cách fork kho lưu trữ cơ sở dữ liệu dựa trên JSON và điều chỉnh các tệp JSON theo nhu cầu.
- GitHub Actions tạo tệp SQLite và tải nó lên GitHub Pages.
- Nếu muốn tạo thủ công một cơ sở dữ liệu SQLite có thể hoạt động với TeaTime, hãy làm theo ví dụ trong kho lưu trữ cơ sở dữ liệu.
- Mỗi cơ sở dữ liệu SQLite chứa một bảng với schema bên dưới. Tên cột có thể được điều chỉnh trong tệp
config.json.CREATE TABLE "books" ( "id" INTEGER, "title" TEXT, "author" TEXT, "year" INTEGER, "lang" TEXT, "size" INTEGER, "ext" TEXT, "ipfs_cid" TEXT, PRIMARY KEY("id" AUTOINCREMENT) ); - Nếu tệp SQLite quá lớn thì có thể chia nhỏ. Cần tham khảo thông tin tối ưu hóa cơ sở dữ liệu. Khuyến nghị dùng FTS.
- Xuất bản kho lưu trữ lên GitHub Pages và gán chủ đề
teatime-databasecho kho lưu trữ
Đóng góp
- Ngay cả khi không biết lập trình, bạn vẫn có thể đóng góp bằng cách fork kho lưu trữ này và kho lưu trữ cơ sở dữ liệu yêu thích của mình.
- Khi fork kho lưu trữ, nên fork thủ công để tránh bị liên kết trực tiếp (
git clone&&git remote add your-origin ...&&git push your-origin main). - Gắn sao cho các kho lưu trữ cơ sở dữ liệu hữu ích cũng là một cách hay. Điều này quyết định thứ tự của cơ sở dữ liệu trong giao diện người dùng TeaTime, giúp người dùng khác dễ dàng tìm thấy những cơ sở dữ liệu tốt nhất.
1 bình luận
Ý kiến trên Hacker News
Một người đóng góp cho IPFS đề xuất các cách có thể cải thiện việc xử lý tải xuống từ nhiều gateway trên IPFS
@helia/verified-fetch, cho phép chấp nhận CID qua API tương tự Fetch và xử lý content routing cùng tra cứu P2PFramework Pear P2P có thể giúp thoát khỏi GitHub và chuyển sang một hệ thống thực sự phân tán
Đang cân nhắc dùng Helia để người dùng có thể đóng góp như các node trong mạng
Có vấn đề bị chặn bởi chính sách CORS khi truy cập một số tài nguyên nhất định
no-corsMọi thứ đều diễn ra trong trình duyệt, không có người dùng, cookie hay theo dõi
Cơ sở dữ liệu được dùng trong TeaTime là một kho GitHub được xuất bản trên GitHub Pages
Vì không biết trong cơ sở dữ liệu có gì nên không biết phải tìm kiếm điều gì
Có câu hỏi về việc liệu có thể dùng một instance ví dụ hay không
Họ tự hỏi liệu có thể tích hợp bookmark Pocket hay không