首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关键值单服务器数据库的数据库软件设计评审

关键值单服务器数据库的数据库软件设计评审
EN

Stack Overflow用户
提问于 2022-04-07 22:11:42
回答 1查看 50关注 0票数 0

问题陈述的上下文。滚动到底部询问问题。

注意:这些表不是关系型的,连接可以在应用程序级别进行。

记录

数据库的大多数原子单位(每个记录都有键、值、id)

页面

每个文件可以存储多个记录。每个页面都是一个有限的块(8kb??),它还存储一个偏移量以在顶部检索每个id?

索引

B树数据结构,它存储进行日志(N)查找的能力,以找到哪个id存在于哪个页面中。我们也可以将id和页面插入到B树中。

表格

每个表都是存储多个页面的目录的抽象。表还存储索引。

数据库

数据库是对目录的抽象,该目录包括作为该数据库一部分的所有表。

数据库管理器

提供在不同数据库之间切换、创建新数据库和删除现有数据库的能力。

主进程中的通信

启动数据库管理器,作为它自己的进程。当进程退出时,它会将索引保存回磁盘。该进程还根据间隔将索引存储回磁盘。为了与这个DB进程进行交互,我们将使用http与它进行通信。

数据库管理器存储对正在使用的当前数据库的引用。存储在数据库管理器中的当前数据库属性存储对hashmap中所有表的引用。每个表存储对从索引页从磁盘读取并保存在内存中的索引的引用。每个表公开用于设置和获取键值对的公共方法。Get方法通过b树导航以找到正确的页面,在该页面上根据存储在第一行上的偏移量找到键val对,并返回一条记录。

每个Set方法向数据库中添加一个键val对,然后更新该表的索引。

未决问题:

  • :在我上面的设计中,我是否犯了任何逻辑错误?
  • ,我应该如何计算数据页的大小(不确定为什么relation的do 8GB)?
  • ,如何将索引B树存储到磁盘?数据库应该在一开始就将表的所有索引加载到内存中吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-08 02:56:00

我头上有几个音符:

你预计会存储多少个记录?最大键和值大小是多少?我问您,因为使用每个页面的文件方案,您可能会发现自己耗尽了可用的文件句柄。

是否需要对数据库/表进行区分?这种分离给你带来了什么?真正的问题不是苏格拉底。

我将根据您的最大键和值大小的倍数来定义页面大小,这样您就可以获得良好的读/写对齐,而不会有太多的碎片。它可能值得有一个天真的,但空间效率低的,实现对齐所有写入。

我建议从最简单的设计开始(加载所有索引、对齐写入、平面模式)来启动数据库,然后根据需要对复杂性和优化进行分层,但不是在前一刻。希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71789508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档