遇到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的高效和扩展性。这简直更神了,我只能膜拜。只不过我连mongdodb都还不会,所以这种好东西我暂时也没有去了解。有空要学习学习吧。

结语

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

数据库SQL,NoSQL之小感悟的更多相关文章

  1. sql server数据库保存图片或者其他小文件

    原文:sql server数据库保存图片或者其他小文件 测试用sql server数据库保存图片或者其他小文件. 文件流字段用varbinary类型. static void Main() { App ...

  2. 大约SQL/NoSQL数据库搜索/思考查询

    转载请注明出处:jiq•钦's technical Blog Hbase特征: 近期在学习Hbase.Hbase基于行健是建立了索引的,查询速度会很快,全然实时. 可是Hbase要基于行健之外的字段进 ...

  3. 数据库 --> SQL 和 NoSQL 的区别

    SQL 和 NoSQL 的区别   一.概念 SQL (Structured Query Language) 数据库,指关系型数据库.主要代表:SQL Server,Oracle,MySQL(开源), ...

  4. 初识关系型数据库(SQL)与非关系型数据库(NOSQL)

    一.关系型数据库(SQL): Mysql,oracle 特点:数据和数据之间,表和字段之间,表和表之间是存在关系的 例如:部门表 001部分,   员工表 001 用户表,用户名.密码 分类表 和 商 ...

  5. 告诉你 SQL 数据库与 NoSQL 数据库的区别

    简单来说 SQL 数据库和 NoSQL 数据库有着共同的目标:存储数据,但存储的方式不同 一. 表 SQL中的表结构具有严格的数据模式约束: 存储数据很难出错. NoSQL存储数据更加灵活自由:可能导 ...

  6. 非关系型数据库(NOSQL)和关系型数据库(SQL)区别详解

    前言: 在我们的日常开发中,关系型数据库和非关系型数据库的使用已经是一个成熟的软件产品开发过程中必不可却的存储数据的工具了.那么用了这么久的关系数据库和非关系型数据库你们都知道他们之间的区别了吗?下面 ...

  7. 非关系型数据库(NoSql)

    最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...

  8. 关系型数据库与NoSQL数据库

    关系型数据库的优缺点 优点: 可以做事务处理,从而保证了数据的一致性: 可以进行JOIN等多表查询: 由于以SQL标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处). 缺点: 大量数据的写 ...

  9. 关系型数据库与NOSQL

    本文转载自: http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) ...

随机推荐

  1. CentOS 6.4 x64 Cacti 监控安装配置

    Cacti 监控安装配置   环境:   安装Cacti 的服务器   Linux 6.4 x64   ip 10.8.8.11     一: 配置iptables , selinux     vi ...

  2. iOS开发——实时监控网速(仅作参考,发现一点问题)

    开发中用到获取网速的地方,应该就两种: 1.下载速度,这种可以直接在接受数据的地方统计计算.这个就不讲了. 2.获取手机网卡的数据,可以监控网卡的进出流量,下面就是. #import "Vi ...

  3. lpc1768usb端点响应以及描述符定义

    #ifndef __USBEP1_H_ #define __USBEP1_H_ #include "usb.h" #include "usbhw.h" exte ...

  4. CSS重设(reset)

    在当今网页设计/开发实践中,使用CSS来为语义化的(X)HTML标记添加样式风格是重要的关键.在设计师们的梦想中都存在着这样的一个完美世界:所有的浏览器都能够理解和适用多有CSS规则,并且呈现相同的视 ...

  5. javascript-函数及兼容

    1.事件绑定,删除,传播,默认方式,获取类型的兼容 var eventList = { //添加事件兼容 addEvent:function (event,type,backevent) { if ( ...

  6. C# TPL学习

    程序Ⅰ:通过Task类创建新线程 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ...

  7. C语言-知识点及学习路线

    最近进行了为期两周的C语言培训,把几年前学过的C语言又重新学习了一遍,然后根据学习的内容和过程,总结了一下学习路线.这是基本的C语言学习路线,相当于编程语言类的基础,再根据自己究竟是要做单片机开发,还 ...

  8. UVa 11631 - Dark roads

    题目大意:政府为了减小开支决定关闭一些路灯,同时保证照亮的路能连接所有路口. 又是一个MST问题,Kruskal算法,不过数据规模比较大,又Submission Error了...扔这吧... #in ...

  9. Python3基础 用 while循环实现 斐波那契数列

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  10. Sigmoid函数

    Sigmoid函数是一个S型函数. Sigmoid函数的数学公式为: 它是常微分方程 的一个解. Sigmoid函数具有如下基本性质: 定义域为 值域为, 为有界函数 函数在定义域内为连续和光滑函数 ...