1.MySQL基础

MySQL是一个开放源代码的关系数据库管理系统。原开发者为瑞典的MySQL AB公司,最早是在2001年MySQL3.23进入到管理员的视野并在之后获得广泛的应用。 2008年MySQL公司被Sun公司收购并发布了首个收购之后的版本MySQL5.1,该版本引入分区、基于行复制以及plugin API。移除了原有的BerkeyDB引擎,同时,Oracle收购InnoDB Oy发布了InnoDB plugin,这后来发展成为著名的InnoDB引擎。2010年Oracle收购Sun公司,这也使得MySQL归入Oracle门下,之后Oracle发布了收购以后的首个版本5.5,该版本主要改善集中在性能、扩展性、复制、分区以及对windows的支持。目前版本已发展到5.7。

和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。

2.MySQL逻辑架构

1.最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。

2.第二层架构主要完成大多少的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。

3.存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。

4.数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

连接管理与安全性(第一层 服务层)
 
 > 连接流程

aaarticlea/png;base64,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" alt="" />

Δ 每个连接的查询都在一个进程中的线程完成。

Δ 服务器负责缓存线程,所以服务层不需要为每个新建的连接创建或者销毁线程(可以使用线程池)。

> 认证流程

1、当客户端(应用)连接到MySQL服务器时,服务器需要对其进行认证。认证基于用户名、原始主机信息和密码。如果使用了安全套接字的方式连接,还可以使用X.509证书认证。

2、一旦客户端连接成功,服务器会继续验证该客户是否具有执行某个查询的权限(例如对某个库某张表执行查询语句)

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWoAAAEsCAYAAADq2fmSAAAgAElEQVR4Ae2dC9xVU/rHVypRVApFKNW/QUiMVBK51uR+iXGZyjUmIxOayW0mFRMGuTYm4xISk0HGJSp3xRAhqpGSS7pJiG77//kus479nvecfc5+z3n3u88+v/X5vO/Zl7XWXuu7z37Os5/1rGfV8jzPM0oiIAIiIAKxJbBRbFumhomACIiACFgCEtT6IoiACIhAzAlIUMf8Bql5IiACIiBBre+ACIiACMScgAR1zG+QmicCIiACdfJFUKtWrVRW5yjijmn/J8eZcueR+oJoQwREoKgE8taonTAu6tVVmQiIgAiIQE4CteRHnZORMoiACIhAjRLIW6Pmtd692tdoi3XxWBHQ9yJWt0ONSSiBvAV1QvuvbomACIhA7AnI9BH7W6QGioAIlDsBadTl/g1Q/0VABGJPIG9BLVtk7O9ljTRQ34sawa6LlhmBvAV1mXFRd0VABEQgNgRko47NrVBDREAERCAzAWnUmbnoqAiIgAjEhkDeglq2yNjcs1g1RN+LWN0ONSahBPIW1Antv7olAiIgArEnkLegJtZH0uJ9/PDDD2b58uWhb9KaNWtyllmxYoV5+umnM+YbOXKkyaeOjIVjdjCJ34uYIVZzRMDkLaiTwArB7P8bNmyYGThwYIVjnP/xxx+zdvepp54yBx98cNbz7sTXX39tTj/9dLdrTjrpJDNv3jy77wT1rFmzzPnnn5/Kow0REAERyEQgdJjTUtWqv/32W9OwYUOzww47VOKw0047pY5t2LDBfP/992bp0qWpY4sWLTLr1q2z+61atTL/+c9/zCuvvGJatGiRykO9G2300+/e6tWrbVwUyjz77LOG+l9//XVDG/xp5cqV5u233/YfKrltbNSkUv1elBxwNbgsCeTtnlfqDyRCsnnz5lZYIojRcE844QTTq1ev1I2njwgcBKtfUCOc69WrZ+rWrZvK69/48MMPzZdffmm23HJLe/jVV181l1xySSpL/fr1zZw5cww/AhtvvLH5+OOPzY477mg1d+p++eWXU3lLbaPUvxelxlvtLU8CeQvqUsezfv1689JLL1ktuG/fvlZoNm7cONWtd999124vWLDAvPbaa6Z79+6pcwjTadOmGT4zJQQ0wtoJavI89thj5qijjjK333671a4HDBiQqaiOiYAIiEBOAmVjo65du7bBbox9uWPHjgbzxKGHHmruvPNO07p1a2sSQRNGa/YL6ZwEs2S4/vrr7Zk33njDNGrUyGrpaOqZ/hYuXJilFh0WAREQAWPKxkbNze7WrZuZOnWq+eyzz0yzZs3M0KFDzZAhQ6xwvuqqq6z5AvPIJptsUum70b59+8B43M4E4AquXbvWau3vvPOOufTSS63GzbkJEyaY8ePHm4kTJ7qsJf3p+i0bdUnfRjU+5gTyFtQx70fO5uFhgT26SZMmpnPnzvaPgbx27doZzmHauPrqq+2gX5s2bczkyZNNgwYNbL2rVq0yX3zxhR2MzHmh/2XArPLpp5+axYsXG+rjR4IfCI61bdvW1KlTx9qpEXDOGyTfupVPBESgvAjkLahLXWPabbfdrFaLO9yMGTPs3+jRoyvd7dmzZ9sBRyeksVlvuummoYQ0lW699dZW2O+6666pazz66KOmZ8+eth1o7tjMEeClnEr9e1HK7NX28iGQt6BOApLNNtvMzJ071/z1r381Xbt2rdSl7bbbzpor/C58CHXsymETg4e48eEtMmrUqLDFlV8EREAEUgTyHkzEFunskanSCd9g9uCVV15pDj/88FA9nT9/vrnxxhvNiBEjzOabb246deoUqnwpZS7H70Up3R+1NRkEykqj5pZhG0bbxbc5PeFr7f8xYuAPjTjs7EG8PPAuwaOESTb+hGsg6bzzzjOXXXaZtZH7z2tbBERABNIJlI0fdXrH89lnggoDgNtvv30+2QPzEFMEoc0PhUscQ6jjOqgkAiIgAtkISFBnI6PjIiACIhATArJRx+RGlGozZKMu1TundpcSgbwFdSl1Sm0VAREQgSQRkOkjSXdTfREBEUgkAWnUibyt6pQIiECSCOQtqGWLTNJtL15f9L0oHkvVJALZCOQtqLNVoOMiIAIiIALVS0A26urlq9pFQAREoGAC0qgLRqgKREAERKB6CeQtqGWLrN4bUaq163tRqndO7S4lAnkL6lLqlNoqAiIgAkkiIBt1ku6m+iICIpBIAqE06vTXXO1XDP1a7jwS+YSoUyIQAwKhBHUM2qsmxJAAP1BKIiAC1UdApo8qsHWCSctQVQGeioiACIQmII06NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCUhQR8tbVxMBERCB0AQkqEMjUwEREAERiJaABHW0vHU1ERABEQhNQII6NDIVEAEREIFoCdSJ9nK6mgiIQK1atQShDAhstdVWZvLkyaZDhw4F91YadcEIVYEIiIAIVCawZMkSc/DBB5t33nmn8smQR2p5nueFLFP22Z1GJHRl/1WoEgB9f6qEraQKPfbYY+a3v/2t+eyzz0yjRo3Ms88+azp16lTlPkijrjI6FRQBERCBzAQ22mgj07FjR3PKKaeYlStXmkMPPdTMmDEjc+Y8jkpQ5wFJWURABEQgLAHenO65556iCOtAQc2F3J9rpPYrDgSVOw/3vdCnCIhAZQK1a9cuirAOFNSywVYGryMiIAIiEIZAMYR1oKCmMQhrv8DWfsWx13Llkf4mEeaLq7wiUG4EChXWgYJaD2O5fZ3UXxEQgeoiUIiwDhTU1dVg1Vv6BNLfJEq/R+qBCFQ/gaoK60BBrYex+m+criACIlBeBKoirAMFdXnhU2/DEJBZLAwt5RWBigTCCuvAWB88jCQ063JOn3zyiWnVqlVOBCtWrDDTp083PXv2rJR35MiR5qKLLjIbb7xxpXM6IAIikDwCs2fPNn/4wx8CO7bNNtuY//u//zNz5841vXr1MsuWLcuYvyw06pdfftkKyObNm5utt97abLfddubDDz80devWNRzjr1mzZvYvndJ9991np35+/fXX5ocffrB/Ls+GDRvcpv0kz+mnn546dtJJJ5l58+bZfQT1mjVrzKxZs8z555+fylOqGzKLleqdU7ujILDzzjubM88802yxxRaBf1tuuaXp16+fadq0qVm+fHnWpgVq1EnSpJlnj8BetGiR6dy5swXyi1/8wrz33nt2m+M9evSoAAohy3z9zTff3Oyxxx4VzrHDfP5jjjnGHl+9erWdHLRu3To7r3+nnXYyr7/+uvn2228rlGM66dtvv13hmHZEQASSRaBt27ZmyJAheXdq4sSJWbVpKikLjToXraVLl5r58+dbTdvlReD++te/Nnzuueee5qWXXjKYQPxC9ogjjnDZ7fFTTz3VtGvXzgwbNsz+mnLyyCOPNNy077//3oY7RMtOQpKNujTuIm9x+SbyRqmcpb+RZmonCtBtt92W6VSsjvF833rrrRXeuIvZwECNOkk26rfeesug5SJ409MNN9xgHnzwQXPzzTenTtWpU8ecccYZ5uSTTzbXXHONFbIDBw409957b4U8bqdr167m4osvNkcddZS5/fbbrXY9YMAAd1qfIhCKwFdffWVat26ds8xTTz1l9ttvv4z5OHf11VebF198MeN5/0GeC7672ExHjRrlP2W3eUUvZurfv7/ZfffdzYUXXhhY7XfffWeuuOIKc95559l89BXbr0u81e67775ut8qf1Ll+/fqs5ZEHyI9MadWqVaZ3795WmeM8b+HFToGCutgXq8n60IrTTR+ffvqpOf74422zOP+Pf/zDbL/99vYLhL1oxx13NKNHj7bmEUZp+eL7jf2vvPKK2W233UzDhg1tHddff739sr/xxhvmkEMOyXpjyUzYwx122KEmkRR07Sg1r4IaWqKF0TY3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" alt="" />

 优化与执行

1、MySQL会解释查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询、决定表的读取顺序,以及选择合适的索引等。

2、 对于SELECT语句,在解析查询之前,服务器会先检查查询缓存,如果能命中,服务器就不必再执行查询解析、优化和执行的整个过程,直接返回查询缓存中的结果集。
aaarticlea/png;base64,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" alt="" />

3.并发控制和锁的概念

当数据库中有多个操作需要修改同一数据时,不可避免的会产生数据的脏读。这时就需要数据库具有良好的并发控制能力,这一切在MySQL中都是由服务器和存储引擎来实现的。

解决并发问题最有效的方案是引入了锁的机制,锁在功能上分为共享锁(shared lock)和排它锁(exclusive lock)即通常说的读锁和写锁。当一个select语句在执行时可以施加读锁,这样就可以允许其它的select操作进行,因为在这个过程中数据信息是不会被改变的这样就能够提高数据库的运行效率。当需要对数据更新时,就需要施加写锁了,不在允许其它的操作进行,以免产生数据的脏读和幻读。锁同样有粒度大小,有表级锁(table lock)和行级锁(row lock),分别在数据操作的过程中完成行的锁定和表的锁定。这些根据不同的存储引擎所具有的特性也是不一样的。

MySQL大多数事务型的存储引擎都不是简单的行级锁,基于性能的考虑,他们一般都同时实现了多版本并发控制(MVCC)。这一方案也被Oracle等主流的关系数据库采用。它是通过保存数据中某个时间点的快照来实现的,这样就保证了每个事务看到的数据都是一致的。详细的实现原理可以参考《高性能MySQL》第三版。

4.事务

1.简单的说事务就是一组原子性的SQL语句。可以将这组语句理解成一个工作单元,要么全部执行要么都不执行。在MySQL中可以使用如下命令操作事务:

start transaction;
select ...
update ...
insert ...
commit;

注意:默认MySQL中自动提交是开启的:

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)

2.事务具有ACID的特性:

原子性(atomicity):事务中的所有操作要么全部提交成功,要么全部失败回滚。

一致性(consistency):数据库总是从一个一致性状态转换到另一个一致性状态。

隔离性(isolation):一个事务所做的修改在提交之前对其它事务是不可见的。

持久性(durability):一旦事务提交,其所做的修改便会永久保存在数据库中。

3.事务的隔离级别:在SQL标准中定义了四种隔离级别:

READ UNCOMMITTED(读未提交):事务中的修改即使未提交也是对其它事务可见

READ COMMITTED(读提交):事务提交后所做的修改才会被另一个事务看见,可能产生一个事务中两次查询的结果不同。

REPEATABLE READ(可重读):只有当前事务提交才能看见另一个事务的修改结果。解决了一个事务中两次查询的结果不同的问题。

SERIALIZABLE(串行化):只有一个事务提交之后才会执行另一个事务。

4.MySQL中可以利用如下语句查询并临时修改隔离级别

5.死锁:两个或多个事务在同一资源上相互占用并请求锁定对方占用的资源,从而导致恶性循环的现象。MySQL的部分存储引擎能够检测到死锁的循环依赖并产生相应的错误。InnoDB引擎解决死锁的方案是将持有最少排它锁的事务进行回滚。

5.MySQL存储引擎及应用方案

1.MySQL采用插件式的存储引擎架构,可以根据不同的需求为不同的表设置不同的存储引擎。可以通过如下命令显示数据库中表的状态信息,以vtu_info表为例,显示如下:

mysql> show table status like 'vtu_info'\G
*************************** 1. row ***************************
Name: vtu_info
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 32
Avg_row_length: 512
Data_length: 16384
Max_data_length: 0
Index_length: 16384
Data_free: 0
Auto_increment: 13843
Create_time: 2015-09-16 18:34:23
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec) mysql>

Name:显示的是表名

Engine:显示存储引擎,该表存储引擎为MyISAM

Row_format:显示行格式,对于MyISAM有Dynamic、Fixed和Compressed三种。非别表示表中有可变的数据类型,表中数据类型为固定的,以及表是压缩表的环境。

Rows:显示表中行数

Avg_row_length:平均行长度(字节)

Data_length:数据长度(字节)

Max_data_length:最大存储数据长度(字节)

Data_free:已分配但未使用的空间,包括删除数据空余出来的空间

Auto_increment:下一个插入行自动增长字段的值

Create_time:表的创建时间

Update_time:表数据的最后修改时间

Collation:表的默认字符集及排序规则

Checksum:如果启用,表示整个表的实时校验和

Create_options:创建表示的一些其它选项

Comment:额外的一些注释信息,根据存储引擎的不同表示的内容也不胫相同。

2.存储引擎介绍:

InnoDB引擎:

1.将数据存储在表空间中,表空间由一系列的数据文件组成,由InnoDB管理;

2.支持每个表的数据和索引存放在单独文件中(innodb_file_per_table);

3.支持事务,采用MVCC来控制并发,并实现标准的4个事务隔离级别,支持外键;

4.索引基于聚簇索引建立,对于主键查询有较高性能;

5.数据文件的平台无关性,支持数据在不同的架构平台移植;

6.能够通过一些工具支持真正的热备。如XtraBackup等;

7.内部进行自身优化如采取可预测性预读,能够自动在内存中创建hash索引等。

MyISAM引擎:

1.MySQL5.1中默认,不支持事务和行级锁;

2.提供大量特性如全文索引、空间函数、压缩、延迟更新等;

3.数据库故障后,安全恢复性差;

4.对于只读数据可以忍受故障恢复,MyISAM依然非常适用;

5.日志服务器的场景也比较适用,只需插入和数据读取操作;

6.不支持单表一个文件,会将所有的数据和索引内容分别存在两个文件中;

7.MyISAM对整张表加锁而不是对行,所以不适用写操作比较多的场景;

8.支持索引缓存不支持数据缓存。

Archive引擎:

1.只支持insert和select操作;

2.缓存所有的写数据并进行压缩存储,支持行级锁但不支持事务;

3.适合高速插入和数据压缩,减少IO操作,适用于日志记录和归档服务器。

Blackhole引擎:

1.没有实现任何存储机制,会将插入的数据进行丢弃,但会存储二进制日志;

2.会在一些特殊需要的复制架构的环境中使用。

CSV引擎:

1.可以打开CSV文件存储的数据,可以将存储的数据导出,并利用excel打开;

2.可以作为一种数据交换的机制,同样经常使用。

Memory引擎:

1.将数据在内存中缓存,不消耗IO;

2.存储数据速度较快但不会被保留,一般作为临时表的存储被使用。

Federated引擎:

能够访问远程服务器上的数据的存储引擎。能够建立一个连接连到远程服务器。

Mrg_MyISAM引擎:

将多个MYISAM表合并为一个。本身并不存储数据,数据存在MyISAM表中间。

NDB集群引擎:

MySQL Cluster专用。

MySQL运行原理与基础架构的更多相关文章

  1. Serverless 的运行原理与组件架构

    本文重点探讨下开发者使用 Serverless 时经常遇到的一些问题,以及如何解决 过去一年,我们和大量 Serverless 用户进行了线上和线下的交流,了解大家的业务场景.对 Serverless ...

  2. mysql工作原理(网络搜索整理的)

    原文网址:Mysql 工作原理 原文网址:MySQL运行原理与基础架构 mysql基本用法原文网址:MySQL(一):基本原理 SQL 语句执行过程 数据库通常不会被直接使用,而是由其他编程语言通过S ...

  3. docker运行原理与使用总结

    docker运行原理概述 Client-Server架构 docker守护进程运行在宿主机上systemctl start docker daemon进程通过socket从客户端(docker命令)接 ...

  4. B/S架构及其运行原理

    一. B/S的概念 B/S(Brower/Server,浏览器/服务器)模式又称B/S结构,是Web兴起后的一种网络结构模式.Web浏览器是客户端最主要的应用软件. 这种模式统一了客户端,将系统功能实 ...

  5. Nodejs的运行原理-架构篇

    前言 本来是想只做一个Nodejs运行原理-科普篇,但是收到了不少私信,要我多分享一些更进阶,更详细的内容,所以我会在接下来的两个月里继续更新Nodejs运行原理. PS:此系列只做Nodejs的运行 ...

  6. MySQL基础架构之查询语句执行流程

    这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的. 比如,在我们从student表中查询一个id=2的信息 select * from student where id=2; 在解释这条 ...

  7. MySQL基础架构

    前段时间订阅了<Mysql实战45讲>(从原理到实战),新的一年为自己充充电.对于这部分内容,我所知道的只来源于我大学里学习的课程<数据库原理>,在大学里学习的只是简单的查询, ...

  8. MySQL中InnoDB存储引擎的实现和运行原理

    InnoDB 存储引擎作为我们最常用到的存储引擎之一,充分熟悉它的的实现和运行原理,有助于我们更好地创建和维护数据库表. InnoDB 体系架构 InnoDB 主要包括了: 内存池.后台线程以及存储文 ...

  9. 【转载】Spark系列之运行原理和架构

    参考 http://www.cnblogs.com/shishanyuan/p/4721326.html 1. Spark运行架构 1.1 术语定义 lApplication:Spark Applic ...

随机推荐

  1. (转载)delphi 中如何调用sql 存储过程

    delphi 中如何调用sql 存储过程 使用TADOStoredProc组件,可以,给你举个例子好了 with ADOStoredProc1 do begin Close; Parameters.C ...

  2. python连接zookeeper的日志问题

    用python连接zookeeper时,在终端里,一直会有zookeeper的日志冒出来,这样会很烦. -- ::,:(: Exceeded deadline by 11ms 解决方法是在连接后设置一 ...

  3. poj 1830 开关问题

    开关问题 题意:给n(0 < n < 29)开关的初始和最终状态(01表示),以及开关之间的关联关系(关联关系是单向的输入a b表示a->b),问有几种方式得到最终的状态.否则输出字 ...

  4. 一步步学习ASP.NET MVC3 (9)——JsonReslt,JavaScript,@Ajax

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们讲述了ActionResult的三个子类,非别是EmptyResult,RediretResult和Conte ...

  5. 洛谷1890 gcd区间

    题目描述 给定一行n个正整数a[1]..a[n].m次询问,每次询问给定一个区间[L,R],输出a[L]..a[R]的最大公因数. 输入输出格式 输入格式: 第一行两个整数n,m.第二行n个整数表示a ...

  6. CoreBluetooth - TouchID应用

    支持系统和机型: iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8, 虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论 ...

  7. datanode无法连接到master

    初次在VM上配置Hadoop,开了三台虚拟机,一个作namenode,jobtracker 另外两台机子作datanode,tasktracker 配置好后,启动集群 通过http://localho ...

  8. nutch 生产者队列的大小如何控制 threadcount * 50

    如果topN 设置为1000万 ,不会这1000万都放到QueueFeeder(内存)中,而是从文件系统中(hdfs)中迭代不断填充QueueFeeder.队列中默认存放 threadcount * ...

  9. 1842-A. Broj

    #include <iostream> using namespace std; int main() { int n; cin>>n; if(n>0&& ...

  10. java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致.

    java的类必须大写 java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致. 在dos用上下箭头,调用已用过的命令