0%

前言

不管是多么高深的套路,还是要构建在基础之上,在进入这个主题的时候,我更加愿意的去从基础入手来阐述这一整个流程。前面已经教会了大家如何产生数据,这里就是开始慢慢梳理一些基础的数据库基础概念。

存储引擎的概念

  • MySQL中的额数据用各种不同的技术存储在文件(或内存)中
  • 这些技术中的每一种技术都是用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力
  • 通过不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能
  • 这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎

举个例子:

  • 如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。
  • 也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)选择支持事务的存储引擎

查看存储引擎

1
show engines;

查看当前使用的存储引擎

1
show variables like '%storage_engine%';
阅读全文 »

前言

疫情期间,无奈新公司迟迟不能报道,心里真的是B了狗了。对于优化数据库的文章网络上很多,但是我觉得很不负责的是都不成体系,要么就是讲的片面,讲的也是千篇一律,索引、分析表、优化sql语句、分库分表什么的。

说了很多理论,看着一堆都头大,而且时间久远,为了复习还是重新写写博文吧。我保证这些代码都是我实实在在测试后才会贴上来的。保证能粘贴就使用。

不着急数据库优化一步一步来,我们既然要优化数据库,那么第一步就是要有数据。这里会介绍两种快速生成大量测试数据的方法,分别使用存储过程和临时数据表。

阅读全文 »

原型模式的定义

用原型实例指向创建对象的类,使用于创建新的对象的类共享原型对象的属性以及方法。

使用场景:

创建新的对象的类共享原型对象的属性以及方法,多以继承来呈现。

我们可以通过 JavaScript 特有的原型继承特性去实现原型模式,也就是创建一个对象作为另一个对象的 prototype 属性值,可以通过 Object.create(prototype, optionalDescriptorObjects)来实现原型继承。

1
var someAnimal = {
2
  name: "喵星人",
3
  eat: function() {}
4
};
5
6
// 使用Object.create创建一个新的动物
7
var anotherAnimal = Object.create(someAnimal, {
8
  eat: {
9
    value: function() {
10
      console.log("吃骨头");
11
    }
12
  }
13
});
14
anotherAnimal.name = "汪星人";
阅读全文 »

众所周知,程序开发有很多语言,它们拥有各种不同的语法和规则,但是通用的思想部分就是——数据结构、设计模式,业内俗称内功。我是 PHP 入行,用 PHP 来实现一个单例我觉得不是什么难题。突然有一天 Node.js 进入了我的视线,心想 JavaScript 这几年皮呀,但是我喜欢。

单例的定义:

保证一个类仅有一个实例,并提供一个访问它的全局访问点。实现的方法为先判断实例是否存在,如果存在则直接返回,否则就创建实例再返回,这就保证了一个类只实例化一次。

使用场景:

一个单一对象。比如:数据库连接、弹窗,一次运行无论操作多少次数据库,连接只存在一个,弹窗不管点击多少次,弹窗只能创建一次。

代码实现:

阅读全文 »

基础铺垫

event loop 它的执行顺序:

  • 一开始整个脚本作为一个宏任务执行
  • 执行过程中同步代码直接执行,宏任务进入宏任务队列,微任务进入微任务队列
  • 当红任务执行完出队,检查微任务列表,有则一次执行,直到全部执行完
  • 执行浏览器 UI 线程渲染工作
  • 检查是否有Web Worker任务,有则执行
  • 执行完本轮的宏任务,回到 2,依次循环,直到宏任务和微任务队列都为空

微任务:

  • MutationObserver、Promise.then()或 reject()、Promise 为基础开发的其它技术,比如 feth Api v8 的垃圾回收过程、Node 独有的 process.nextTick。

宏任务:

  • script、setTimeout、setInterval、setImmdiate、I/O、UI rendering

注意:所有任务开始的时候,由于宏任务包括了 script,所以浏览器会先执行一个宏任务,在这个过程中你看到的延迟任务(例如:setTimeout)将放到下一轮宏任务中执行。

阅读全文 »

导入数据

为了方便我们的练习节省时间,最好的方法就是使用官方提供的数据。

数据地址:传送门

先下载下来,然后通过以下方法导入数据

1
mongoimport --db=zipcodes --collection=zipcodes --file=zips.json

没个 item 字段:

1
{
2
  "_id": "10280",
3
  "city": "NEW YORK",
4
  "state": "NY",
5
  "pop": 5574,
6
  "loc": [-74.016323, 40.710537]
7
}
  • _id 表示邮政编码
  • city 表示城市名称
  • state 表示城市所属州
  • pop 表示人口
  • loc 表示所在地的精度和维度
阅读全文 »

我们 node.js 只是实现了部分 ES6 的语法,所以为了让我们 ES6 的代码能 100% 在 node.js 下执行,必须使用我们的 babel 把 ES6 代码编译成 nodejs 可执行的代码。

  • node 环境:v12.13.1

开发环境搭建

首先,我们建立一个文件 my_koa

1
mkdir my_koa && cd my_koa
2
npm init -y

在我们的 my_koa 文件夹下就会产生一个 package.json 文件使我们的包配置文件,内容如下:

1
{
2
  "name": "my_koa",
3
  "version": "1.0.0",
4
  "description": "",
5
  "main": "index.js",
6
  "scripts": {
7
    "test": "echo \"Error: no test specified\" && exit 1"
8
  },
9
  "keywords": [],
10
  "author": "Neilyoz",
11
  "license": "ISC"
12
}

然后安装我们的依赖

1
npm i --save-dev @babel/cli @babel/core @babel/node @babel/preset-env @babel/register eslint

安装完成后 package.json 如下:

1
{
2
  "name": "my_koa",
3
  "version": "1.0.0",
4
  "description": "",
5
  "main": "index.js",
6
  "scripts": {
7
    "test": "echo \"Error: no test specified\" && exit 1"
8
  },
9
  "keywords": [],
10
  "author": "Neilyoz",
11
  "license": "ISC",
12
  "devDependencies": {
13
    "@babel/cli": "^7.7.4",
14
    "@babel/core": "^7.7.4",
15
    "@babel/node": "^7.7.4",
16
    "@babel/preset-env": "^7.7.4",
17
    "@babel/register": "^7.7.4",
18
    "eslint": "^6.7.1"
19
  }
20
}
阅读全文 »

最近看 Node.js 相关的一些东西,跟着书上的教程实现了一个 Express + MongoDB + Vue.js 实验性项目,对于常年使用 LNMP 黄金搭档的我来说,不用写 SQL 语句真的是太爽了,也不用关心 MySQL 中的字段增减,真的是太幸福了。

既然学习就肯定要动手,不动手的学习就是耍流氓!说干就干!

MongoDB 的基本概念存入单元

  1. 数据库 databases
  2. 集合 collection
  3. 文档 document

正确的理解名词有助于我们在未来的开发和工作中方便和他人进行沟通,MongoDB 中可以存在多个数据,而数据库中可以存在多个集合,每个集合中可以存放多条文档数据。

希望大家通过练习来掌握基础 MongoDB 操作,别光看,动手敲! 别光看,动手敲! 别光看,动手敲!

阅读全文 »