`
Tyrion
  • 浏览: 263095 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

数据库,终究还是数据结构

 
阅读更多

好久不写博客了,也是ITEYE最近的首页文章实在太水,来逛的少。最近在看淘宝沈询的博客文章,讲数据库方面的理论和实践,科普性的小文,有时来点小幽默,看起来蛮轻松。微博上也大概录了二十条笔记,现在满脑子各类数据结构的特性,如范围查找、读写性能、是否面向磁盘结构、并行指标、内存占用。像把大学时学的不怎么好的数据结构重新捡起了理了一遍,当时觉得这一大坨各种烦人还绕人的数据结构究竟有啥用(其实现在工作中用到的也就有限的几种,包括算法也是,做行业业务软件的重点还是在梳理业务),现在才知道大用场在这里,IT系统的基石还是这些东东。拿数据库来说,因为无数前辈们的智慧能够将底层巨复杂的东东抽象成你所需要了解的SQL语言就可以应付一般的单机数据库日常使用需要。

 

数据库底层的核心,其实就是映射(mapping),也就是一大堆的key-value。针对这些映射数据,其实做的就是两件事:读和写。不断的读,不断的写,交叉的读和写,这些就是数据库需要做的事情。但只这么说的话其实懂点计算机语言的都能写个小数据库出来,但一般除了写的人自己没人用{#emotions_dlg.tongue_out},为什么?当然是性能。

 

SQL语言可以看作是一个数据库供使用时的操作指令,但如果你的数据库读/写时很慢,比其它产品慢(不拿商业的就拿开源的比)那鬼才用你,当然以国内的环境说不定某些高校中倒会发生这种奇葩事情。但说到慢肯定不会一开始就慢(不然这鸟代码写的得多烂),一般都会达到某种限制之后才会出现,比如并发读,已经存有大量数据时的写,如何保证事务等等,这时才是拼产品真正实力的时候。针对各种不同的问题场景,出现了不同的解决方案,比如要快速查找数据,用有序数组存储,其二分查找的时间复杂度大概是O(log2N)。用平衡二叉树可以支持数据自动扩展,让树能够在保持有序的前提下尽可能平衡。要并行度高的话可以用跳表,要面向磁盘结构的话可以试试B树、LSM Tree。但又没有一种数据结构能包打天下?答案是没有,没有一种能够解决所有的问题,实际更多是在各种权衡和妥协中找到一个平衡点。

 

正如作者所言“在目前的硬件体系下,写的快的一般查询都慢,查询的条件支持丰富的基本上写的都慢,好不容易弄个系统写的也快查的也挺快的机器消耗就大了。市面上的大部分的数据库系统,主要做的事情就是把数据在上面这两类数据库中倒来倒去,以期望于满足更多应用的需求场景,代价嘛就是代码非常复杂。”

 

现实就是容易理解的模型往往性能都不好,性能好的模型往往不容易理解,所以数据库,终究还是数据结构。。。

2
0
分享到:
评论

相关推荐

    数据结构的算法演示系统

    数据结构的算法演示系统是一种强大的学习工具,专为理解和实践数据结构而设计。它通过直观的可视化方式,帮助用户深入理解...因此,无论你是学生还是专业开发人员,都应该充分利用这样的工具来提升你的数据结构技能。

    dbeaver-le-21.0.0-win32.win32.x86_64 (4).zip

    DBeaver是一款强大的开源数据库管理工具,适用于多种操作系统,包括Windows、Linux和Mac OS。...无论你是进行日常的数据查询,还是进行复杂的数据库设计,DBeaver都能为你提供高效且可靠的解决方案。

    基于Python的活动管理系统基础教程

    数据模型在app/models.py中定义,通过SQLAlchemy ORM实现数据库模型的映射。路由在app/routes.py中设置,用于处理用户的HTTP请求,并返回相应的页面响应。 知识点七:数据库操作与ORM 在Web开发中,数据库操作是必...

    毕业设计酒窖管理系统java

    3. **数据库管理**:`db_winemanage.sql`文件通常包含数据库的结构和初始数据,可能是MySQL或PostgreSQL等关系型数据库的脚本文件。开发者需要理解SQL语言来创建表、插入数据和执行查询,以便管理和检索酒窖中的葡萄...

    pymongo-3.11.2-cp36-cp36m-win32.whl.zip

    这种压缩包的结构比较简单,通常在下载后,用户会通过Python的包管理工具pip来进行安装。 在使用PyMongo时,开发者首先需要安装这个包。通过命令行,开发者可以使用pip命令行工具来安装这个whl文件。例如,如果文件...

    EasyBuy2(1).rar

    总的来说,"EasyBuy2(1).rar"是一个适合学习和实践的JavaEE电商项目,使用了数据库连接池与MySQL数据库进行数据交互,并且是北大青鸟课程中的一个结业项目,可以帮助学习者提升JavaEE开发技能。通过分析其结构,可以...

    图书类别信息管理BookManage.zip

    该项目采用servlet技术,结合SQL Server数据库,实现了对图书数据的高效处理和展示。以下是这个项目涉及的主要知识点: 1. **Servlet**:Servlet是Java服务器端应用程序,用于扩展Web服务器的功能。在这个项目中,...

    pyodbc-4.0.32-cp38-cp38-win_amd64.whl.zip

    这对于数据科学、数据处理和需要大量数据交互的应用程序来说至关重要。 接着,"4.0.32"是该库版本号,表示这是pyodbc的一个特定的发布版本。版本号的命名通常遵循语义化版本控制规则,其中主版本号、次版本号和修订...

    基于MVC模式的高考志愿填报系统.zip

    开发者使用Eclipse创建项目,编写Java代码,构建系统模型,设计数据库结构,以及实现控制器和视图的功能。 系统的主要功能可能包括以下几个方面: 1. **用户注册与登录**:考生需先注册账号,通过邮箱或手机号验证...

    pymongo-4.0.2-cp37-cp37m-win32.whl.zip

    MongoDB是一种流行的非关系型数据库,适用于存储大量的数据并支持复杂的数据结构。接着,"4.0.2" 是这个库的版本号,这表明文件中包含了pymongo库的4.0.2版本。版本号在软件开发中是非常重要的,它不仅可以帮助...

    pymongo-3.12.1-py3-none-any.whl.zip

    开发者在安装这个包后,可以利用pymongo提供的API来操作MongoDB,这使得Python应用能够处理大量的结构化数据,并提供快速查询功能。由于文件格式为wheel,因此可以预期安装过程会相对简便快捷。

    pyodbc-4.0.32-cp38-cp38-win32.whl.zip

    通常wheel文件的内部结构包括了编译好的模块文件、元数据以及可能包含的其他资源文件。 这个文件是一个为Python 3.8版本的Windows 32位系统准备的预编译二进制包,使用了Python官方推荐的分发格式。用户在获取此...

    pymssql-2.2.4-cp38-cp38-win32.whl.zip

    在这里,“pymssql”指的是一个Python数据库库,它允许Python程序通过TDS协议与Microsoft SQL Server数据库进行交互。这个库为Python提供了访问SQL Server的能力,使其能够执行数据库操作,如查询、更新、删除和插入...

    demo03.rar

    2. **数据库**:如果包含.sql文件,可能是数据库脚本或备份,涉及SQL查询、数据库设计和管理。 3. **网站或Web应用**:HTML、CSS、JavaScript文件组合可能构成一个网站或Web应用,涉及前端开发技术。 4. **图片和...

    pymssql-2.1.4-cp35-cp35m-win_amd64.whl.zip

    "pymssql" 是指这是一个专门用于Python语言的数据库模块,目的是为了实现Python与Microsoft SQL Server数据库之间的交互。版本号 "2.1.4" 表示这是pymssql模块的特定版本,而 "cp35" 和 "cp35m" 分别指明了这个版本...

    pymssql-2.1.4-cp35-cp35m-win32.whl.zip

    标题中的“pymssql-2.1.4-cp35-cp35m-win32.whl.zip”表明这是一个包含Python数据库库pymssql的安装包。pymssql是一个针对Microsoft SQL Server数据库的Python模块,它允许Python程序与SQL Server进行交互,执行SQL...

Global site tag (gtag.js) - Google Analytics