4 个版本 (2 个重大变更)
0.3.0 | 2023年3月10日 |
---|---|
0.2.0 | 2022年11月30日 |
0.1.1 | 2022年2月24日 |
0.1.0 | 2021年11月23日 |
#1715 in 密码学
620KB
1.5K SLoC
Merkle tree Bulletin board,mysql 后端
这是为 merkle-tree-bulletin-board crate 提供的基于 mysql/mariadb 的后端。
它部分作为基于 SQL 的后端的一个演示,但它本身也是可用的。
提供了一个名为 test_mysql 的二进制测试程序;这只是为了演示目的,在生产系统中没有任何功能。
我不是 SQL 调优专家;这不如 merkle-tree-bulletin-board crate 的代码那么谨慎,然而每个操作都是 O(mysql 单索引操作)*O(数据大小),数据大小通常是 O(log Bulletin board 大小)。也就是说,没有操作应该很慢。
如何使用
定义一些函数来获取到数据库的 mysql 连接,例如
fn get_bulletin_board_connection() -> Conn {
let opts = Opts::from_url(&CONFIG.database.bulletinboard).expect("Could not parse bulletin_board_url url");
Conn::new(opts).expect("Could not connect to bulletin board database")
}
然后以某种方式初始化数据库
/// Delete all data and recreate the schema.
pub fn initialize_bulletin_board_database() -> anyhow::Result<()> {
let mut conn = get_bulletin_board_connection();
conn.query_drop("drop table if exists PUBLISHED_ROOTS")?;
conn.query_drop("drop table if exists PUBLISHED_ROOT_REFERENCES")?;
conn.query_drop("drop table if exists BRANCH")?;
conn.query_drop("drop table if exists LEAF")?;
let schema = merkle_tree_bulletin_board_backend_mysql::SCHEMA;
conn.query_drop(schema)?;
Ok(())
}
然后创建后端,例如
let conn = get_bulletin_board_connection();
let backend = merkle_tree_bulletin_board_backend_mysql::BackendMysql{ connection: std::sync::Mutex::new(Box::new(conn)) };
许可证
版权所有 2021 Thinking Cybersecurity Pty. Ltd.
在您选择的下列许可证下使用:
- Apache 许可证 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您提交的任何有意包含在作品中的贡献,根据 Apache-2.0 许可证定义,将按上述方式双许可,不附加任何额外条款或条件。
版本说明
0.2:依赖项中 mysql 版本的变化。旧版本有一个被撤回的间接依赖项 funty 1.2。
0.3:匹配 0.3 版 bulletin board - 更好的错误处理(API 错误更改)。
依赖项
~14–28MB
~451K SLoC