
计算机学科学习笔记
文章平均质量分 77
SuPhoebe
不是我针对谁,我是说在座的诸位都比我强
展开
-
设计数据密集型应用 第六章:分区
6. 分区我们必须跳出电脑指令序列的窠臼。 叙述定义、描述元数据、梳理关系,而不是编写过程。—— Grace Murray Hopper,未来的计算机及其管理(1962)文章目录6. 分区术语澄清分区与复制键值数据的分区根据键的范围分区根据键的散列分区一致性哈希负载倾斜与消除热点分片与次级索引基于文档的二级索引进行分区基于关键词(Term)的二级索引进行分区分区再平衡平衡策略反面教材:hash mod N固定数量的分区动态分区按节点比例分区运维:手动还是自动平衡请求路由执行并行查询本章小结参考翻译 2021-11-22 15:02:49 · 787 阅读 · 0 评论 -
WIN7下创建ODBC数据源到SQL Server的新数据源
北邮计算机数据库实验四需求 此方法是用JDBC-ODBC访问数据库(1)单击【开始】——》【控制面板】——》【ODBC】然后打开【ODBC数据源管理器】对话框(2)在【ODBC数据源管理器】对话框中,单击【用户DNS】标签,单击【添加】按钮,弹出【创建新数据源】对话框。 如下图所示(3)在【创建新数据源】对话框中,在驱动程序序列表中选择【SQL Server】,单击【完成】按钮,弹出【创建到SQ原创 2016-04-16 17:25:56 · 16311 阅读 · 1 评论 -
SQL SERVER的字段类型说明
以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。字段类型 描述 bit 0或1的整型数字 int 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字 smallint 从-2^15(-32,768)到2^15(32,767)的整型原创 2016-04-13 20:39:07 · 972 阅读 · 0 评论 -
创建数据库以及其属性的sql语句
创建数据库的SQL语句:create database stuDB on primary -- 默认就属于primary文件组,可省略(/*--数据文件的具体描述--*/ name='stuDB_data', -- 主数据文件的逻辑名称 filename='D:\stuDB_data.mdf', -- 主数据文件的物理名称 size=5mb, --主数据文件的初始原创 2016-04-13 20:12:29 · 5847 阅读 · 1 评论 -
查看mysql数据库大小、表大小和最后修改时间
1.查看数据库表基本信息。 select * from information_schema.TABLES where information_schema.TABLES.TABLE_SCHEMA = ‘数据库名’ and information_schema.TABLES.TABLE_NAME = ‘表名’;2.查看mysql数据库大小 SELECT sum(DATA_LENGTH)+sum(转载 2016-03-27 21:23:57 · 10993 阅读 · 0 评论 -
高级数据库六:浅谈数据库的多版本并发控制(MVCC)
多版本并发控制Multi-Version Concurrency Control基础理解事务T1改变数据V1,将其改为数据V2,在堆中,数据如下图事务T3改变了V2,将其改为V3,在堆中,数据如下图:目前事务T2还在活动中,所以V1和V2属于recently dead状态,而不是真的dead状态。从可视性而言,事务T0只能看到数据V1。因为它早于事务T1启动。事原创 2017-11-27 09:42:43 · 6595 阅读 · 0 评论 -
数据库系统概念中table/view/schema/index的关系
操作对象 创建 删除 修改 模式 CREATE SCHEMA DROP SCHEMA 表 CREATE TABLE DROP TABLE ALTER TABLE 视 图 CREATE VIEW DROP VIEW 索 引 CREATE INDEX DROP INDEX 表大家不一定要了解这个东西的准确定义是什么,原创 2016-03-23 17:30:23 · 11566 阅读 · 0 评论 -
高级数据库二十:并行JOIN算法(Sorting)
Parallel Join Algorithms (Sorting)背景关于Join的其他背景可以查看上一篇讲Hash Join的文章。SINGLE INSTRUCTION, MULTIPLE DATA (SIMD)有一系列的CPU指令允许处理器同时在多个数据点上执行相同的操作。目前的AMD和Intel CPU均具有ISA和微体系结构,支持SIMD操作。优点:原创 2018-01-15 07:21:37 · 1926 阅读 · 0 评论 -
高级数据看二十一:查询计划编译
Query Compilation背景对于in-memory数据库,因为所有的数据都在内存之中,所以很多其他影响速度的因素(如磁盘IO等)都消失了,所以提高吞吐量的唯一方法是减少执行的指令数量。提高十倍速度,DBMS需要减少90%的指令提高百倍速度,DBMS需要减少99%的指令我们可以通过code specialization来实现这种指令数量的减少。即,通过生成DBMS原创 2018-01-15 13:34:11 · 961 阅读 · 0 评论 -
高级数据库十一:存储模型和数据布局
存储模型和数据布局(Storage Models & Data Layout)对于内存数据库而言,它的结构大致如下可以将之理解为一个大的数组,通过索引(或者直接扫描全部内存)得到所需要的值和存储地址,则通过页和页偏移等信息找到需要的数据。如果页面是不定长的数据块,可能需要做一个二次指针才可以。类型表示INTEGER/BIGINT/SMALLINT/TINYINT C原创 2017-12-27 09:28:54 · 3789 阅读 · 2 评论 -
VS用C语言连接SQL Server解决办法
我在优快云论坛上问了这个问题,但是没有人理我,折腾了半天终于搞定了。原帖链接,没有解决办法,下面提供解决办法。确认打开了SQL Server服务首先,从我的电脑->右键->管理进入 确认SQL Server服务打开。也可以使用cmd(命令行窗口),用管理员身份打开cmd,输入net start [服务名]效果如下图所示: 如果服务名中间有空格,请务必加上双引号。配置ODBC具体方法见链接。请一原创 2016-04-17 17:16:36 · 14690 阅读 · 2 评论 -
第一范式、第二范式、第三范式、BC范式
范式的目标应用数据库范式可以带来许多好处,但是最重要的好处归结为三点:1.减少数据冗余(这是最主要的好处,其他好处都是由此而附带的)2.消除异常(插入异常,更新异常,删除异常)3.让数据组织的更加和谐…DEMO让我们先从一个未经范式化的表看起,表如下:先对表做一个简单说明,employeeId是员工id,departmentName是部门名称,job代表岗位,jobDescription是岗位说明,转载 2016-04-25 21:23:01 · 19600 阅读 · 0 评论 -
数据库系统概念第十二章 事务
事务(Transaction)事务是作为单个逻辑工作单元执行的一系列数据库操作,这些操作可能会修改多个表中的多个元组事务正常执行的结构是:begin;SQL execution 1SQL execution 2...SQL execution Ncommit;begin标志开始一个事务,多个SQL语句就是事务逻辑工作单元,commit(提交)是结束当前事务并提交事务内数据变更,让其生效数据原创 2016-06-10 16:14:31 · 10942 阅读 · 0 评论 -
高级数据库七:索引的锁和闩
索引的锁和闩(Locking & Latching)索引的锁和闩索引作用一种能够加快数据检索速度的数据结构,但是会占用额外的读写维护操作和存储空间。索引实现B树系列、哈希表等等。这些别的地方说的比较多,我就不多提了。索引锁对于之前疏文章中提到的那些并发控制、多版本控制等,我们知道了如何使用锁来保护数据库的数据。但是对于索引,我们需要用别的方式和方法来原创 2017-11-28 00:30:10 · 1279 阅读 · 0 评论 -
高级数据库八:不需要锁和闩的索引(一)
不需要锁和闩的索引(Latch-free OLTP Indexes Part I)T-TreesT-Trees 是一种基于AVL树的数据结构,它的设计是人们针对内存数据库做的优化。不像B-Trees 系列在硬盘上那样存储大量的信息,包括索引、值等等,T-Trees 利用了所有数据都已经在内存中的这个条件,它存储的是指向数据的指针。这样可以有效地减少overhead,具有较高的节点空原创 2017-12-24 01:05:48 · 913 阅读 · 0 评论 -
高级数据库九:不需要锁和闩的索引(二)
不需要锁和闩的索引(Latch-free OLTP Indexes Part II)Bw-Tree Index对于并发的跳表而言,我们不能在无锁的情况下有反向指针,因为CaS一次只能更新一个地址。这个数据结构是微软在2010年左右做的,一开始微软想用的是Skip List,但是因为Skip List的限制,他们就设计了Bw-Tree。现在用Skip List的数据库,老师知道的只有原创 2017-12-24 09:04:21 · 1012 阅读 · 0 评论 -
高级数据库十:联机分析处理的索引
OLAP Indexes对于传统的分析数据库结构大致如下OLTP数据库保持相互独立,然后将需要的数据传输到OLAP数据库。OLAP Schemas决策支持系统(DECISION SUPPORT SYSTEMS)为组织的管理,运营和计划层面提供帮助的人通过分析历史数据来帮助人们做出有关未来问题和问题的决策的应用程序。大数据的起源就是这儿。STAR SCHE原创 2017-12-26 07:31:29 · 1052 阅读 · 0 评论 -
高级数据库十二:数据库压缩
Database Compression背景如果数据库需要从硬盘中获得数据,那么数据的I/O操作才是数据库的瓶颈。所以需要对数据进行压缩。内存中的数据库管理系统比较复杂。压缩数据库降低了DRAM的性能要求和处理时间。DRAM不仅价格贵,而且在运行且维护的代价也非常大。关键在于如何平衡速度和压缩率之间的关系。在内存数据库中,按照老师的说法,总是选择速度而不是压缩率。也就是说,如果原创 2017-12-28 12:32:24 · 5238 阅读 · 0 评论 -
高级数据库十二(2):HIVE文件存储格式
数据库十二(2):HIVE文件存储格式昨天在看HIVE的时候,突然发现HIVE的文件存储对数据的压缩刚好是前天看的数据库压缩的内容。所以刚好可以拿出来讲一下。TextFileHive默认格式,数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2、Snappy等朴素压缩算法使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从原创 2017-12-30 00:35:44 · 684 阅读 · 0 评论 -
高级数据库十四:检查点协议
Checkpoint Protocols背景日志允许DBMS在崩溃/重新启动后恢复数据库。 但是这个系统每次都要重做整个日志。检查点允许系统忽略大部分日志以减少恢复时间,就像存档点一样。理想的检查点应该具有:不能减慢常规事务的处理速度。不能引入不可接受的延迟峰值。不能要求过多的内存。CONSISTENT VS. CHECKPOINTS方法1:一致的检查点原创 2018-01-02 10:24:41 · 1609 阅读 · 1 评论 -
高级数据库十三:日志协议
Logging ProtocolsLogging Schemes恢复算法日志一般与系统恢复有关,恢复算法是确保数据库一致性、原子性和持久性(尽管事务失败)的技术。恢复算法有两个部分:正常txn处理期间的操作,以确保DBMS可以从故障中恢复。无法将数据库恢复到确保原子性,一致性和持久性的状态之后的操作。日志方案有两种日志方案物理日志记录 记录对数原创 2017-12-31 11:47:41 · 1807 阅读 · 0 评论 -
高级数据库十五:查询优化器(一)
Optimizer Implementation(Part I)背景在讲述这个优化器的时候,就必须先了解查询过程。在本系列的数据库四:浅谈数据库查询过程(Query Processing)中大致地说明了一下数据库的查询过程,但是没提到查询优化器的具体策略与实现。对于查询而言,我们期望优化器的作用是找到最小代价的正确执行方案。但是这是一个NP完全问题,所以没有一个优化器能够真正地找到原创 2018-01-05 10:33:03 · 9904 阅读 · 0 评论 -
高级数据库十六:查询优化器(二)
Optimizer Implementation(Part II)在这儿解释一下,逻辑查询计划或者逻辑计划指的是关系代数层面的查询语句;物理查询计划或者物理计划指的是具体查询层面的查询算法,具体到每一个JOIN的算法选择,每一个SELECT操作的算法实现(scan或者index)。瀑布模型(Cascades)分层搜索(STRATIFIED SEARCH)首先使用转换规则重写原创 2018-01-07 09:05:05 · 5241 阅读 · 0 评论 -
高级数据库二十五:不易失内存数据库
Non-Volatile Memory Databases背景新兴的存储技术提供像DRAM一样的低延迟读取/写入,但具有永久写入和大容量等类似SSD的特性。AKA存储级内存,永久内存最早的设备将是块地址(NVMe),但是基于块地址的设备并不被数据库研发人员所青睐,它的性能仅仅类似于一个更好更快的NAND flash内存。后来的设备,字节地址改变了人们设计操作系统结构的方原创 2018-01-17 10:41:33 · 1234 阅读 · 0 评论 -
初识Restful架构
初识Restful架构起源REST这个词,是Roy Thomas Fielding在他2000年的博士论文《Architectural Styles and the Design of Network-based Software Architectures》中提出的。《CHAPTER 5 Representational State Transfer (REST)》是REST的...原创 2018-04-09 10:42:08 · 463 阅读 · 0 评论 -
C++中的make_shared,shared_ptr与weak_ptr
C++中的make_shared,shared_ptr与weak_ptrC++11中引入了智能指针,同时还有一个模板函数std::make_shared可以返回一个指定类型的std::shared_ptr。shared_ptr的基本操作#include <memory>#include <iostream>struct Foo { Foo() ...原创 2018-04-14 12:45:28 · 3613 阅读 · 0 评论 -
Restful API 设计原则
Restful API 设计原则前言网络应用程序分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备……),这也就意味着前端的开发代码、开发框架变得多种多样。因此,必须有一种统一的机制,方便不同的前端代码与后端进行通信。这就导致了API构架的流行。REST是目前比较成熟的一套互联网应用程序的API设计理论。 它可以降低开发的复杂度,提...原创 2018-04-10 05:00:11 · 7386 阅读 · 1 评论 -
Priority Inversion - 优先级翻转
英文: Priority Inversion 中文: 优先级翻转、优先级倒置、优先级逆转 介绍: 即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。什么是优先级反转简单从字面上来说,就是低优先级的任务先于高优...转载 2018-05-03 22:48:02 · 887 阅读 · 0 评论 -
进程和线程、协程的区别
现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来。python中有协程库gevent,go里面的goroutine也是一个非常棒的协程库。本文主要介绍进程、线程和协程三者之间的区别。概念进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,也是基本的执行单元,是操作系统结构的基础。每个进程都有自己的独立内存空间,不同进程通过...原创 2019-04-04 11:03:40 · 2680 阅读 · 0 评论 -
PageRank算法 -- 从原理到实现
本文整理自博文PageRank算法 – 从原理到实现1. 算法来源这个要从搜索引擎的发展讲起。最早的搜索引擎采用的是 分类目录1的方法,即通过人工进行网页分类并整理出高质量的网站。那时 Yahoo 和国内的 hao123 就是使用的这种方法。后来网页越来越多,人工分类已经不现实了。搜索引擎进入了 文本检索 的时代,即计算用户查询关键词与网页内容的相关程度来返回搜索结果。这种方法突破了数量的限...原创 2019-04-02 06:37:51 · 53668 阅读 · 14 评论 -
文本相似度-bm25算法原理及实现
转载自文本相似度-bm25算法原理及实现原理BM25算法,通常用来作搜索相关性评分。一句话概况其主要思想:对Query进行语素解析,生成语素qiq_iqi;然后,对于每个搜索结果D,计算每个语素qiq_iqi与D的相关性得分,最后,将qiq_iqi相对于D的相关性得分进行加权求和,从而得到Query与D的相关性得分。BM25算法的一般性公式如下:Score(Q,d)=∑inWi⋅R(...转载 2019-04-08 09:00:27 · 1920 阅读 · 0 评论 -
未定义行为与求值顺序
未定义行为若违反某些规则,则令整个程序失去意义。定义在计算机程序设计中,未定义行为(undefined behavior)是指执行某种计算机代码所产生的结果,这种代码在当前程序状态下的行为在其所使用的语言标准中没有规定。常见于编译器对源代码存在某些假设,而执行时这些假设不成立的情况。同时语言规范也不要求编译器诊断未定义行为(尽管许多简单情形确实会得到诊断),而且不要求所编译的程序做任何有意...原创 2019-07-29 11:14:55 · 878 阅读 · 0 评论 -
异步调用future/promise模式(C++版本)
Future/Promise 编程模式如何减少服务器应答时间,如何更强地进行并发。异步调用的Future/Promise1模式就是实现这一目的的手段之一。一个 Future 就是说“将来”你需要某些东西(一般就是一个网络请求的结果),但是你现在就要发起这样的请求,并且这个请求会异步执行。或者换一个说法,你需要在后台执行一个异步请求。C++中的应用C++11创建了线程以后,我们不能直接从th...原创 2019-07-29 13:30:57 · 1914 阅读 · 0 评论 -
HTTP协议与其请求方法
HTTP协议与其请求方法HTTP协议简介HTTP(超文本传输协议,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,最初的目的是为了提供一种发布和接受HTML页面的方法,即用于从WWW服务器传输超文本到本地浏览器的传输协议。所有的WWW文件都必须遵守这个标准。HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客...原创 2018-04-08 09:44:26 · 2203 阅读 · 0 评论 -
线程的3种实现方式
线程的3种实现方式在引入线程的操作系统中,进程是资源分配的基本单位,线程是独立调度的基本单位。在同一进程中,线程的切换不会引起进程切换。在不同进程中进行线程切换,如从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。线程分为两种: 名称 描述 用户级线程(User-Level Thread, ULT) 由应用程序所支持的线程实现, 对内核不可见...原创 2018-03-20 04:55:48 · 13002 阅读 · 0 评论 -
高级数据库二十二:矢量化运行
Vectorized Execution (Part I)说实话,这节课有点没听明白。上节课说到了通过矢量化来加速查询的优化,需要这么做的原因是:构建一个DBMS是非常难的一件事情DBMS中有很多的问题需要去克服新的CPU加速效果不明显,所以必须想别的办法来提升效果硬件方面一般来说,现在用的CPU主要分为两种MULTI-CORE CPUS使用少量高功率内原创 2018-01-16 12:25:23 · 1777 阅读 · 1 评论 -
高级数据库二十二:矢量化运行(二)
Vectorized Execution (Part II)上一次将的哥大的论文的矢量化算法在没有四五个SIMD寄存器的情况下是没法运行的。因为DBMS需要将64位的地址和64位的数据存入寄存器考虑到数据压缩技术,我们不能改变64位的地址,但是我们不一定要全部存储64位的数据。这样产生的问题是,压缩数据的位宽不一定自然地适合SIMD寄存器插槽。如你压缩前128位的寄存器存储了4个32位原创 2018-01-16 13:36:31 · 1005 阅读 · 0 评论 -
高级数据库二十四:内存存不下的内存数据库
Larger-than-Memory Databases背景我们知道DRAM价格非常昂贵,且运行耗电量也非常大。那么当内存数据库存储的信息更大了之后,我们就希望使用更加便宜的存储设备,希望改善DRAM带来的一些不利条件。新技术因此就产生了Larger-than-Memory Databases这种技术。即,允许内存中的DBMS存储/访问磁盘上的数据,而无需重新引入面向磁原创 2018-01-17 08:38:58 · 633 阅读 · 0 评论 -
技术面试的系统设计题(一)
技术面试的系统设计题(一)本文为课程翻译和学习笔记,课程地址System Design for Tech Interviews。 关于课后题,这儿就不公布答案了。应该还是比较简单的。什么是系统设计题在面试的时候,面试官经常会让我们设计一些系统,比如:设计一个像bit.ly一样的URL缩短服务。你将如何实现谷歌搜索?设计一个C/S应用程序,允许人们互相下棋。如何将关系存翻译 2018-01-09 09:05:05 · 23949 阅读 · 2 评论 -
高级数据库十七:优化器估价模型
Optimizer Cost Models我们在上两次讲查询优化文章中,提到了基于成本的查询计划,它们为数据库的当前状态生成执行特定查询计划的查询成本估计。查询成本与我们上一节课讨论的优化器搜索查询策略的方式无关。就像二维平面上的最短路模型(不同的最短路算法,如Dikstra、Floyd)与它采用的距离模型(曼哈顿距离、欧氏距离、切比雪夫距离)无关。那么这节课就是讲解不同的估价模型。原创 2018-01-08 12:55:56 · 1420 阅读 · 0 评论