< 返回版块

长琴 发表于 2023-05-07 23:06

Tags:rust,日报,qdrant,reefdb,typedmap,stereokit-rs,proqnt,

来Qdrant参与贡献

Qdrant OSS 团队现在用一种新方法来挑选加入 Rust 团队的合适候选人——让候选人先做出贡献。如果有一个开放的 Rust 开发者职位,你有兴趣申请,可以从 GitHub Issue 中选择一个任务,解决它,然后提个 PR。如果你的贡献质量好,核心团队接受了 PR,你将受邀参加面试。如果这也顺利进行,你很可能会收到加入 Qdrant 团队的邀请。如果不行... 那好吧,Qdrant 将会为你的贡献付费。

当然,即便不用做求职申请,也可以去做某些标有“bounty”标签的任务来获取奖金:https://github.com/qdrant/qdrant/issues?q=label%3A%22%F0%9F%92%8E+Bounty%22

这真的是个好方法,也是个好消息,赶紧行动起来吧。

Qdrant 是一个面向下一代AI应用的向量数据库。

reefdb

ReefDB是一个使用Rust编写的极简主义、内存和磁盘数据库管理系统,实现了基本的SQL查询功能和全文搜索。

主要功能:

  • 支持内存或磁盘存储
  • 基本的SQL语句(CREATE TABLE,INSERT,SELECT,UPDATE,DELETE)
  • INNER JOIN 支持
  • 使用倒排索引的全文搜索
  • 自定义数据类型(INTEGER,TEXT,FTS_TEXT)

以磁盘存储为例:

use reefdb::OnDiskReefDB;

fn main() {
    let kv_path = "kv.db";
    let index = "index.bin";
    let mut db = OnDiskReefDB::new(kv_path.to_string(), index.to_string());

    let queries = vec![
        "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)",
        "INSERT INTO users VALUES (1, 'Alice')",
        "INSERT INTO users VALUES (2, 'Bob')",
        "SELECT * FROM users WHERE id = 1",
    ];

    for query in queries {
        let result = db.query(query);
        println!("Result: {:?}", result);
    }
}

GitHub: https://github.com/sachaarbonel/reefdb

typedmap

类型化的HashMap,允许根据Key类型定义不同的值类型。在需要单个 HashMap 中存储不同的键值对时非常有用。

基本用法:

use typedmap::{TypedMap, TypedMapKey};

// 定义key的类型
#[derive(Debug, PartialEq, Eq, Hash)]
struct Dog{name: String};
#[derive(Debug, PartialEq, Eq, Hash)]
struct Cat{name: String};

struct Bark{volume: u32};
struct Mew{pitch: f32};

// 定义key对应的value的类型
impl TypedMapKey for Dog {
    type Value = Bark;
}
impl TypedMapKey for Cat {
    type Value = Mew;
}
// 创建一个新的map
let mut animal_sounds: TypedMap = TypedMap::new();
// 插入数据
animal_sounds.insert(Dog { name: "Spiky".into() }, Bark { volume: 80 });
animal_sounds.insert(Cat { name: "Spot".into()  }, Mew  { pitch: 12000.0 });

// 获取Dog key的值Bark.
let spiky_volume = animal_sounds.get(&Dog { name: "Spiky".into() }).unwrap().volume;
assert_eq!(spiky_volume, 80); 

GitHub: https://github.com/kodieg/typedmap/

stereokit-rs

Stereokit 的Rust 绑定和wrapper。

StereoKit是一个易于使用的开源虚拟现实库,专为创建 VR、AR 和 XR 体验而设计。

示例:

fn basic() {
    let sk = crate::SettingsBuilder::new()
        .app_name("StereoKit Example App")
        .init()
        .unwrap();
    let model = sk.model_create_mesh(crate::Mesh::CUBE, crate::Material::DEFAULT);
    let mut position = glam::Vec3::default();
    let mut redness = 0.0;
    sk.run(|sk| {
        position.x = sk.time_total_f32().sin();
        position.y = sk.time_total_f32().cos();
        redness = sk.time_total_f32().sin() - 0.3;
        sk.model_draw(
            &model,
            glam::Mat4::from_scale_rotation_translation(
                glam::Vec3::new(1.0, 1.0, 1.0),
                glam::Quat::IDENTITY,
                position,
            ),
            crate::Color128::new(redness, 0.1, 0.9, 1.0),
            crate::RenderLayer::default(),
        );
    }, |_| {});
}

GitHub: https://github.com/MalekiRe/stereokit-rs

proqnt

Proquint 可用于以更易读的方式编码二进制数据,例如 IP 地址,公钥和 UUID。

proquint 是一种可读的五个字母的字符串,用于编码唯一的 16 位整数。

使用示例:

use std::net::Ipv4Addr;
use proqnt::{FromProquints, IntoProquints, Proquint};
assert_eq!(
    format!("{}", Ipv4Addr::new(127, 0, 0, 1).proquint_encode()),
    "lusab-babad"
);
assert!(
    Ipv4Addr::new(127, 0, 0, 1).proquint_digits().eq([
        u16::parse_proquints("lusab").unwrap(),
        u16::parse_proquints("babad").unwrap()
    ].into_iter())
);
assert_eq!(
    format!("{}", [127u8, 0, 0, 1].proquint_encode()),
    "lusab-babad"
);
assert!(
    Ipv4Addr::new(127, 0, 0, 1).proquint_encode().into_iter().eq([
        "lusab".parse::<Proquint>().unwrap(),
        "babad".parse::<Proquint>().unwrap()
    ].into_iter())
);

GitHub:https://github.com/imbrem/proqnt


From 日报小组 长琴

社区学习交流平台订阅:

评论区

写评论
lshoo 2023-05-18 21:26

Qdrant有中文社区吗?

1 共 1 条评论, 1 页