我正在尝试设计一个带有索引的数据库表的内存模拟。我已经实现了一个简洁的 DSL 来查询看起来像这样的表
table.select do
age > 44
name == "Adam"
end
并产生一堆Condition
类的实例,比如EqCondition
,GteCondition
等等。嗯,这很容易。Table
检查这些条件并选择适当的索引来执行查询。我坚持的是应该Index#select
接受什么样的参数?如果它接受与 Table 的 select 方法相同的参数,它会执行两次相同的工作。假设我们需要选择年龄大于 25 岁的所有人。首先,Table 类确定 (age, name) 上有一个可以使用的索引。然后,索引应该确定这是一个仅涉及部分键的范围查询并相应地执行它。
我在询问有关如何正确设计它的一些想法(也许是在真实数据库中如何完成的一些更简单的版本)?
PS。这是Ruby,但我认为它不相关。在 Java/C# 中,它看起来像table.select(new GtCondition("age", 44), new EqCondition("name", "Adam"))