Tôi đã thử phát triển một Graph Dataframe và Database
(github.com/eastlighting1)Tôi là một học viên vừa tốt nghiệp thạc sĩ từ một phòng thí nghiệm nghiên cứu về knowledge graph, ontology và các chủ đề tương tự.
Sau khi tốt nghiệp, tôi suy nghĩ xem mình có thể xây dựng năng lực ở mảng nào, rồi chợt nhớ đến "open source" mà trường từng nhấn mạnh. Sau đó, khi nghĩ ra nhiều ý tưởng khác nhau, tôi nhớ lại thời còn học thạc sĩ đã từng định làm nghiên cứu bằng neo4j nhưng phải bỏ dở vì IO mất quá nhiều thời gian. Vì thế, với ý tưởng phát triển các thư viện vừa giữ được hiệu năng ở mức thư viện có sẵn vừa có tốc độ nhanh, tôi đang xây dựng nhiều thư viện đồ thị dưới chủ đề Graph Ecosystem với sự hỗ trợ của AI Agent.
-
Lynxes
- Lynxes là một thư viện dataframe hướng tới trở thành phiên bản Graph của Polars. Vì vậy cái tên cũng đi theo mạch Pandas - Polars rồi đến Lynxes.
- Tôi cũng đang triển khai và sử dụng cùng một định dạng dữ liệu tên là
gf, có hình thức tương tự RDF của ontology. - Nó dựa trên Apache Arrow, nhưng nền tảng này về cơ bản không hỗ trợ CRUD kiểu dataframe! Vì vậy tôi đã phải suy nghĩ rất nhiều về cách xử lý vấn đề này.
- Nhìn vào benchmark, nói thật thì nó chưa nhanh hơn các thư viện phổ biến như networkx hay igraph, nhưng tôi vẫn khá hài lòng vì ít nhất dùng cũng không đến mức bất tiện.
-
CaracalDB
- CaracalDB là một thư viện database hướng tới trở thành phiên bản Graph DB của DuckDB. Chắc hẳn mọi người đã nhận ra ngay cấu trúc X + DB được lấy từ DuckDB, còn cái tên Caracal thì tôi tham khảo gợi ý của GPT rằng đây là một loài khá giống với linh miêu.
- CaracalDB cũng có một tệp DB chuyên dụng là
.crcl. Ban đầu nó là cấu trúc thư mục, nhưng khi tôi nhờ chuyển sang dạng tệp thì hóa ra nó vẫn chạy tốt ở dạng file nên khá ổn. - Vì là embedded DB nên đương nhiên nó nhanh hơn Neo4j vốn dùng server.
Cả hai thư viện đều đã được đưa lên PyPI nên có thể dùng ngay.
uv add lynxes
uv add caracaldb
Ngoài ra, tôi cũng đang thực hiện benchmark và tối ưu hóa riêng tại repository này.
- TASK 1 là Knowledge Graph, TASK 2 là GraphRAG. Tiếp theo tôi dự định sẽ thử GNN.
Vẫn còn rất nhiều chỗ thiếu sót. Những góp ý hoặc phê bình như "Tại sao lại triển khai thế này?", "Tại sao benchmark lại được làm theo cách này?" đều rất được hoan nghênh.
Chưa có bình luận nào.