《极客时间教程 - MongoDB 高手课》笔记
第一章:MongoDB 再入门
MongoDB 简介
什么是 MongoDB?
一个以 JSON 为数据模型的文档数据库。
为什么叫文档数据库?
文档来自于“JSON Document”,并非我们一般理解的 PDF,WORD 文档。
谁开发 MongDB?
上市公司 MongoDB Inc. ,总部位于美国纽约。
主要用途
- 应用数据库,类似于 Oracle, MySQL
- 海量数据处理,数据平台。
什么是 MongoDB?
一个以 JSON 为数据模型的文档数据库。
为什么叫文档数据库?
文档来自于“JSON Document”,并非我们一般理解的 PDF,WORD 文档。
谁开发 MongDB?
上市公司 MongoDB Inc. ,总部位于美国纽约。
主要用途
部分章节内容更偏向于 DBA 的工作,在实际的开发工作中相关性较少,直接略过。
MySQL 逻辑架构分为三层:
解决并发问题的最常见方式是加锁。
排它锁(exclusive lock) - 也叫写锁(write lock)。锁一次只能被一个线程所持有。
共享锁(shared lock) - 也叫读锁(read lock)。锁可被多个线程所持有。
MongoDB 是一个分布式文档数据库,由 C++ 语言编写。
面向文档的数据库使用更灵活的“文档”模型取代了“行”的概念。通过嵌入文档和数组,面向文档的方式可以仅用一条记录来表示复杂的层次关系。
MongoDB 中也没有预定义模式(predefined schema):文档键值的类型和大小不是固定的。由于没有固定的模式,因此按需添加或删除字段变得更容易。
综上,MongoDB 支持结构化、半结构化数据模型,可以动态响应结构变化。
略
【典型回答】
Java 最显著的特性:
Java 既是解释型语言,又是编译型语言
解决并发问题,其实最简单的办法就是让共享变量只有读操作,而没有写操作。这个办法如此重要,以至于被上升到了一种解决并发问题的设计模式:不变性(Immutability)模式。所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。换句话说,就是变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,也就是保持了不变性。
Guava 是 Google 开源的 Java 类库,提供了一个工具类 RateLimiter。
【示例】使用 RateLimiter 限流
//限流器流速:2 个请求/秒
RateLimiter limiter = RateLimiter.create(2.0);
//执行任务的线程池
ExecutorService es = Executors.newFixedThreadPool(1);
//记录上一次执行时间
prev = System.nanoTime();
//测试执行 20 次
for (int i = 0; i < 20; i++) {
//限流器限流
limiter.acquire();
//提交任务异步执行
es.execute(() -> {
long cur = System.nanoTime();
//打印时间间隔:毫秒
System.out.println((cur - prev) / 1000_000);
prev = cur;
});
}
// 输出结果:
// ...
// 500
// 499
// 500
// 499
并发编程可以总结为三个核心问题:分工、同步、互斥。
已有 synchronized,还支持 Lock 的原因是,需要一把锁支持:
从虚拟机视角来看,执行 Java 代码首先需要将它编译而成的 class 文件加载到 Java 虚拟机中。加载后的 Java 类会被存放于方法区(Method Area)中。实际运行时,虚拟机会执行方法区内的代码。