我想存储员工记录。我不想使用任何外部库或框架。我正在尝试从头开始构建数据结构。
将有三个字段,
EmployeeName
Age
Salary
我们也想查询类似
Get all the salary where EmployeeName = "Bill"
Get all the EmployeeName where salary > 2000
Get all the Salary where age='50'
我愿意使用任何语言,但不能使用任何内置程序包。为达到此目的推荐的数据结构是什么?
答案 0 :(得分:0)
我认为此练习的目的是自我教育。
如果是这样,Where to begin reading SQLite source code?是开始阅读以了解如何构建此类软件的好地方。
如果您真的想自己滚动,我建议您将数据存储在隐藏在对象后面的结构/对象/字典数组中(它们的调用取决于您的语言),以便您进行插入/更新/表格上的delete方法通过定义明确的访问函数。根据您的语言,使用grep
,filter
等可能无法有效地实施您的操作。除显而易见的字段外,还包括deleted
作为字段。这样,您只需更新该记录即可删除记录,而不必尝试修改表。
要提高效率,请通读https://cstack.github.io/db_tutorial/parts/part7.html,了解如何编写b树。然后创建b树映射EmployeeName
到具有该名称的记录的索引列表,同上age
和salary
。现在,修改表时,修改访问方法以更新这些字段的索引。现在,您的搜索可以遍历b树,找到所需记录的索引,然后可以在表中查找它们。
与数据库所提供的功能相比,这大大简化了,但是您正在了解数据库的工作方式。既要了解它们为什么会扩展,又要知道它们为什么没有那么神奇。