开发者社区> 问答> 正文

今天遇到的一个面试题,我比较没思路,大家帮忙看看帮忙给个思路或代码:报错

今天面试,遇到一个问题,学的不是很好,向大家求助。问题如下:

有一个txt文档,里面有两个字段,一个name,一个age。然后底下是两百万条数据,类似于如图:

第一问:如何将这一百万条数据通过java读取,并且存取到一个mysql表中,

第二问:这一百万条数据存入磁盘,大概占多少存储空间?

第三问:一个数据库有2亿条数据,count(*)估计时间会很长,如何优化查询,优化更新?

第四问:那些汉字不能存在char[]中,不在unicode中

展开
收起
kun坤 2020-06-06 15:29:18 571 0
1 条回答
写回答
取消 提交回答
  • @皮总 @红薯######

    第一问:使用mysqlimport导入数据。最好不要使用insert into。

    第二问:如果存储是{char(15), unsigned tinyint }, Utf8(1Bytes to 3Bytes per character),tinyint 1Bytes 。那么(3*15 + 1)× 1000000 / (1024*1024.0) 大约 44M大小。

    第三问:给主键添加索引, 更新planner statistics。而且根据某个字段合理分区,这样查询会很快。

    第四问:不知道,但是我想不存在这样的汉字不在unicode中

    ######回复 @Lesus : 原来如此 感谢回答~######回复 @陈昊 : 数据库中的静态信息,例如MySQL中MyISAM表包含了一些行数等静态信息。count(*)时就直接取出就可以了。######planner statistics是?######姓氏分区,图方便,hash分区######

    第四问:不知道,但是我想不存在这样的汉字不在unicode中

    汉字好像有7万多个,而 Unicode 按极限来算只能表示65536个字符,所以不在 Unicode 里的汉字很多。

    ######人家问我有哪些,百度没百度出来,谁知道 啊######Thx, 可能使用专门为汉字设计的gbk更好######

    那些汉字不能存在char[]中,不在unicode中


    回答生僻字就ok了。。本来这个问题就没法具体回答

    ######Unicode 编码能表示所有的汉字, 所以,我也认为, 不存在用unicode无法表示的汉字.######

    第一个问题:

    try(BufferedReader reader = new BufferedReader(new FileReader("filename"))){
    String line = null;
    while((line = reader.readeLine()!=null){
    String[] strs=line.split("\\t");
    //根据strs值构建sql,或者批处理插入
    }
    }catch(Exception e){
    e.printStackTrace();
    }

    第二个问题:

    一个汉字一般占2个字节,一个字母占一个1个字节,你这种数据100万左右的记录,即便有复杂的索引,也应该不会超过20M。

    第三个问题:

    可以使用count(0)代替count(*)来提高一点效率,你所说的2亿条记录,可以采用分表,建立索引的办法提高效率。

    第四个问题:

    没太看到你的意思~汉字的Unicode编码范围:\u4E00-\u9FA5 \uF900-\uFA2D,超出这个范围就不是汉字了。

    你这种需求,可以直接将文本导出mysql dump工具需要的格式,使用mysql bin目录下的dump工具导入表中,这种效率更高。

    ######学习了。
    2020-06-06 15:29:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云技术面试红宝书 立即下载
超全算法笔试-模拟题精解合集 立即下载
程序员面试宝典 立即下载