这是我的一个面试问题。有一个巨大的数据库,将拥有数百万的员工记录。我应该能够根据名字,姓氏,年龄,位置等任何字段进行有效查询,并且应该快速检索结果。您将如何设计数据库?我根据索引等回答,但面试不满意。有关如何实际完成此设计的任何建议吗?
答案 0 :(得分:0)
我不确定问题的背景,但据我了解,您被问及数据建模,而不是关于现有数据库/查询的“纯粹”优化。
我会采用以下方法。企业可以拥有“操作数据库”或OLTP,它可以优化用于输入新数据(最小化索引集,高度规范化)和“决策支持数据库”(数据仓库,OLAP系统),从标准化角度来看,它具有大量冗余,但允许您以非常快的速度搜索不同的标准。从OLTP系统建模数据仓库是一个相当大的主题,需要深入了解业务需求。
要回答有关搜索员工的问题,我建议构建一个简单的星型模式(每个搜索条件由维度表表示)。然后可以在模型的顶部添加适当的技术,如索引,分区,物化视图。
答案 1 :(得分:0)
这些要求建议考虑使用键值存储而不是传统的SQL数据库。
键值存储将允许您执行相对非结构化的查询(即,您不需要提前定义架构),并且设计用于非常快速的读取。
示例:
Redis的
卡桑德拉
长椅
MongoDB的
答案 2 :(得分:0)
也许面试官想要一个关键词:normalisation
世界上所有的指数都无法帮助一个规范化的数据库 - 也许所讨论的“员工记录”包含每个记录的名称,地址......以及记录是项目,休假日,病假等等。
我相信,线索是“数百万”员工记录。即使是最大的政府部门也没有“数百万”员工,因此数据库没有正常化。