BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #6417同步于 2012/4/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

面试碰到的一个关于数据库的题目,问一下思路

byzhaohuan
2012/4/9镜像同步8 回复
笔试碰到的一个题目: 当当网的用户想要收藏一本书,还会给每本书添加标签,请设计数据结构实现这一操作。还有:①写出获取一个用户所有图书的sql代码;②获取热门书籍的所有标签;③在大规模数据下,如何优化你的数据库。 没学过数据库,只是看过一些简单的sql操作,这个题目的确没什么思路,在这里问一下大家了。。
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
binux机器人#1 · 2012/4/9
不用sql,随便找个字符串存用户的收藏,书的标签,逗号分割。无论多大都没关系。
byzhaohuan机器人#2 · 2012/4/9
【 在 binux 的大作中提到: 】 : 不用sql,随便找个字符串存用户的收藏,书的标签,逗号分割。无论多大都没关系。 就是大规模的数据,要如何优化呢?
binux机器人#3 · 2012/4/9
如果这样存的话,没什么好优化的了,最多就分分表了 【 在 byzhaohuan 的大作中提到: 】 : 就是大规模的数据,要如何优化呢?
binux机器人#4 · 2012/4/10
对,这不是关系型数据库的做法,但是为了应对大数据量,需要反范式设计和冗余存储。 实际系统中依据标签搜索书籍不会是实时查库的,那样的效率太低,这些功能数据都是离线生成的。 【 在 zhihao 的大作中提到: 】 : 发现你喜欢用逗号分隔。这种做法在关系型数据库中不是显得很正规。虽然可行。但是后期做功能的时候,如果依据标签搜索书籍的话按照这样的设计法检索的话效率极低
binux机器人#5 · 2012/4/10
是 【 在 zhihao 的大作中提到: 】 : 建立倒排索引,把逗号分隔的字段作为非结构化数据处理是么?
zhangxsh机器人#6 · 2012/4/14
如果用oracle存储:标签用逗号分割存储的话违法了一范式,其实也无可厚非,但是要是按标签进行分类或者统计的话就无法索引扫描,效率非常差,标签应该单独拿出来存储,可以在主表中适当冗余。 至于数据结构么,采用关系数据库的话,那肯定是多表连接了,所以用户表,用户-书籍表-标签,书籍表,标签表,用户表上建立用户ID的索引,在用户书籍标签表上建立用户ID和书籍ID标签ID的联合索引,书籍建立书籍ID的索引 至于大批量数据处理么,考虑当当网的特性,属于oltp,所以单笔交易都不大,在表上建立适当的索引,然后对表进行分区,利用分区裁减技术只扫描部分数据,这样分区结合设计好的索引,可以保证较高的查询性能。 至于性能方面其实有很多考虑,表的设计,sql的设计,索引的设计,以及DBMS的一些指标等等方方面面,还有存储等等
byzhaohuan机器人#7 · 2012/4/14
【 在 zhangxsh 的大作中提到: 】 : 如果用oracle存储:标签用逗号分割存储的话违法了一范式,其实也无可厚非,但是要是按标签进行分类或者统计的话就无法索引扫描,效率非常差,标签应该单独拿出来存储,可以在主表中适当冗余。 : 至于数据结构么,采用关系数据库的话,那肯定是多表连接了,所以用户表,用户-书籍表-标签,书籍表,标签表,用户表上建立用户ID的索引,在用户书籍标签表上建立用户ID和书籍ID标签ID的联合索引,书籍建立书籍ID的索引 : 至于大批量数据处理么,考虑当当网的特性,属于oltp,所以单笔交易都不大,在表上建立适当的索引,然后对表进行分区,利用分区裁减技术只扫描部分数据,这样分区结合设计好的索引,可以保证较高的查询性能。 : ................... 谢谢谢谢~额,好多专业词不太懂,没学过数据库的桑不起啊。。。得去查查
binux机器人#8 · 2012/4/14
用户-书籍表-标签 书籍至少有1000k, 每个至少10个标签,至少100个人打过。 那么这个表的行数是1000M。 如果采用水平分表的方法,那么以哪个字段来分?分多少个表? 分别在查询书籍所有的标签,和标签所有的书的时候需要扫描多少个表? 【 在 zhangxsh 的大作中提到: 】 : 如果用oracle存储:标签用逗号分割存储的话违法了一范式,其实也无可厚非,但是要是按标签进行分类或者统计的话就无法索引扫描,效率非常差,标签应该单独拿出来存储,可以在主表中适当冗余。 : 至于数据结构么,采用关系数据库的话,那肯定是多表连接了,所以用户表,用户-书籍表-标签,书籍表,标签表,用户表上建立用户ID的索引,在用户书籍标签表上建立用户ID和书籍ID标签ID的联合索引,书籍建立书籍ID的索引 : 至于大批量数据处理么,考虑当当网的特性,属于oltp,所以单笔交易都不大,在表上建立适当的索引,然后对表进行分区,利用分区裁减技术只扫描部分数据,这样分区结合设计好的索引,可以保证较高的查询性能。 : ...................