数据库SQL,NoSQL之小感悟

遇到1000万数据表

最近遇到一个问题,就是单表数据过1000万的存储及查询问题。举个例子:1000万的数据存在一个表中,字段4-5个样子,日常 开发中难免要做过滤、排序、分页。如果把这几个放在一起即要过滤又要排序,还要分页那么数据量大一些就会发现特别慢。

10多年前刚入行时就听许多的人讨论分页,说什么1000万大表分页存储过程啥的。我之后一直工作中也没怎么遇到大数据量的开发工作,也真是惭愧啊,现在算是补补课吧。

1000万数据分个页吧

常用的数据库产品对分页都是有一些支持的,SQL语句肯定是OK的,同样的问题在于如何高效。因为分页查询最大的问题在于查询越往后的数据就越慢,因为要扫描的数据多。比如要查询第9999900-10000000之前的记录,就得将前面的数据找起。

为什么会这样呢?因为数据存在存储介质里,是一种数据结构的,计算机通过指令来查找想要的数据就要有一种算法,因为机器本身不知道你想要哪些数据。所以在数据写入时的自然顺序会在具体查找时变成麻烦。

换句话说,如果不在乎时间长短,那么分页查询其实也没多大事,大不行等个几十秒也能出来数据。但现实是这很难被接受。所以现在有一些方法来加快这个过程。

比如人们就想出一个方法,在分页查询前记录一下最后那页的记录的ID,然后查询时直接从这个ID往后找数据,这种方法就解决了上面说的扫描问题,利用数据库的数据检索功能大大提升性能。

但这种方法有弊端,毕竟这个ID需要有顺序啊,所取的数据也要是排过序的。但这说明想要提升效率方法是有的。

索引

我也不知道为什么,一直以来就很惧怕数据库方面的开发,我心中索引一直是个很复杂的东西,所以工作许久也没有好好去学习一下。最近正好亲密接触了一下,才发现这东西真是好东西,也没有想象中的那么可怕。

所谓索引其实就是对特定的数据进行一种排序,然后与实际的数据记录作映射,这样的好处就是扫描数据时可以在一个有序的集合里查找,那么算法自然就简单高效啦。在实际应用中也发现,通过索引查询性能可以大幅提升。

当然索引并没有这么简单,在什么字段上建索引很有讲究,要根据实际业务情况来决定。这也就是为什么一些电商的网站很少会有所有字段都给排序的原因,因为这种成本是很昂贵的,甚至不可实现。大家注意淘宝是不是只给了特定的一些排序方式?

NoSQL

N多年前在NoSql开始流行时我就想学习来着,但可能是自己太懒的原因,直到今年我才开始了解了NoSql。目前听的最多的Mongodb,甚至还有Redis也称为Nosql,HBase之类的。它们有什么特别呢?

我觉得Nosql最大的特点在于基于Key-value,这个特点的好处就是易于数据的扩展。传统数据库一旦遇到数据大了要么就是分库、分表,还有垂直,水平分的。但是NoSql天然解决这个问题,因为数据可以通过算法进行横向扩展。而且Nosql通常保存的数据结构也比较特别。另外Nosql通常是利用内存多于磁盘,这样可以大大提升读写效率吧。

在K-V的基础上提供一些类SQL的功能,就变得非常好用了。比如Mongodb可以实现过滤、排序、分页等操作,这对于开发人员来说简直神了,不用担心跨库或者跨表查询啦。

但是也有弊端,比如join操作可能就没这么好玩啦。

SQL+NoSQL

最近看到国内有个团队在做一处TiDB的开源项目,是基于google的论文开发的一套数据库,特点就是兼容mysql,同时又有nosql的高效和扩展性。这简直更神了,我只能膜拜。只不过我连mongodb都还不会,所以这种好东西我暂时也没有去了解。有空要学习学习吧。

结语

看起来复杂的东西其实道理不复杂,对,简单的就是好的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构师进阶

Java高级工程师面试总结

原因:面试的第一个问题,一般都是让你简单介绍下你自己,或者介绍一下你最近的项目,而一个面试者,如果连自己的简历都无法熟知,对里面提到的项目、技术都无法描述清楚的...

1012
来自专栏idba

数据库系统中的“黑天鹅”

一 前言 纳西姆.尼古拉斯.塔勒布的经典著作《黑天鹅》中对“黑天鹅现象”的定义是

963
来自专栏烙馅饼喽的技术分享

我的CMS开发记-2 该ORM就ORM,该写SQL还是写SQL

     啊,是ORM还是SQL,这是个问题.      先扯段题外话,我原来公司的产品是java和.net共存,java部分是外包的,于是么各位也可想而知,两...

37610
来自专栏数据和云

千头万绪:从一道面试题看数据库性能和安全的方方面面

这个问题在朋友圈引起了很多朋友的兴趣,转发并且提问,希望有一个标准答案输出作为参考。

751
来自专栏数据库新发现

数据库性能和数据库安全:面试题上以小见大

友情链接:http://enmotech.com/web/classify/43.html

930
来自专栏带你撸出一手好代码

到底该不该使用存储过程

看到《阿里巴巴java编码规范》有这样一条 ? 关于这条规范,我说说我个人的看法 我觉得用不用存储过程要视所使用的数据库和业务场景而定的,不能因为阿里巴巴的技术...

4249
来自专栏杨建荣的学习笔记

闪回区报警引发的性能问题分析(r11笔记第11天)

自从有了Zabbix+Orabbix,很多监控都有了一种可控的方式,当然对于报警处理来说,报警是表象,很可能通过表象暴露出来的是一些更深层次的问题。这不又来一个...

36710
来自专栏芋道源码1024

慢讯!Sharding-Sphere 正式进入 Apache 孵化器

美国时间2018年11月10日,开源分布式数据库中间件生态圈Sharding-Sphere正式进入Apache基金会孵化器。

1693
来自专栏前端儿

2016校招内推 -- 阿里巴巴前端 -- 四面面试经历

其实也没什么可说的,一面主要问基础,二面才进入项目实习之类的探讨,三面两者都有吧但还是综合多一点

1112
来自专栏牛客网

九月初,终于稳了一波,可以放松一下了嘛 附面经

最近几年的经历教会我一个道理,那就是,只要你努力,世界上没有什么事搞不砸的。——尼克·霍恩比

1181

扫码关注云+社区

领取腾讯云代金券