专栏名称: 程序人生
十年漫漫程序人生,打过各种杂,也做过让我骄傲的软件;管理过数十人的团队,还带领一班兄弟姐妹创过业,目前在硅谷一家创业公司担任 VP。关注程序人生,了解程序猿,学做程序猿,做好程序猿,让我们的程序人生精彩满满。
目录
相关文章推荐
51好读  ›  专栏  ›  程序人生

将分布式系统转换为可嵌入的库有多难?

程序人生  · 公众号  · 程序员  · 2023-12-18 21:01

正文

请到「今天看啥」查看全文


let client = QdrantClient::from_url("http://localhost:6334").build()?;client    .create_collection(&CreateCollection {        collection_name: collection.into(),        vectors_config: Some(VectorsConfig {            config: Some(Config::Params(VectorParams {                size: OPENAI_EMBEDDING_DIM,                distance: Distance::Cosine.into(),                ..Default::default()            })),        }),        ..Default::default()    })    .await?;

对这个代码稍作探索就可以发现它调用了相应的 GRPC 服务。剩下的事情就简单了,在 qdrant 代码库中找到 GRPC service 的实现(它用了 tonic,很容易辨识),然后找到 create collection 的方法,避开无关代码和任何跟分布式处理有关的代码,一层层找下去,很容易发现核心代码是 self.toc.perform_collection_meta_op ,而核心的数据结构就是 TableOfContent

另外一个方法 —— 如上图所示,qdrant 还提供了 RESTful API(见 actix),所以我们也可以看它的代码:

可以看到,二者殊途同归。

接下来,就是来找 TableOfContent 在何处创建。很简单的代码搜索后,不难发现它在 main.rs 里初始化的:







请到「今天看啥」查看全文