在校生通用收费系统的超市模块实现外文翻译资料

 2022-08-27 10:24:12

MySQLrsquo;s architecture is very different from that of other database servers, and

makes it useful for a wide range of purposes. MySQL is not perfect, but it is flexible

enough to work well in very demanding environments, such as web applications. At

the same time, MySQL can power embedded applications, data warehouses, content

indexing and delivery software, highly available redundant systems, online transaction

processing (OLTP), and much more.

To get the most from MySQL, you need to understand its design so that you can

work with it, not against it. MySQL is flexible in many ways. For example, you can

configure it to run well on a wide range of hardware, and it supports a variety of data

types. However, MySQLrsquo;s most unusual and important feature is its storage-engine

architecture, whose design separates query processing and other server tasks from

data storage and retrieval. In MySQL 5.1, you can even load storage engines as runtime

plug-ins. This separation of concerns lets you choose, on a per-table basis, how

your data is stored and what performance, features, and other characteristics you

want.

This chapter provides a high-level overview of the MySQL server architecture, the

major differences between the storage engines, and why those differences are important.

Wersquo;ve tried to explain MySQL by simplifying the details and showing examples.

This discussion will be useful for those new to database servers as well as

readers who are experts with other database servers.

MySQLrsquo;s Logical Architecture

A good mental picture of how MySQLrsquo;s components work together will help you

understand the server. Figure 1-1 shows a logical view of MySQLrsquo;s architecture.

The topmost layer contains the services that arenrsquo;t unique to MySQL. Theyrsquo;re services

most network-based client/server tools or servers need: connection handling,

authentication, security, and so forth.

The second layer is where things get interesting. Much of MySQLrsquo;s brains are here,

including the code for query parsing, analysis, optimization, caching, and all the

built-in functions (e.g., dates, times, math, and encryption). Any functionality provided

across storage engines lives at this level: stored procedures, triggers, and views,

for example.

The third layer contains the storage engines. They are responsible for storing and

retrieving all data stored “in” MySQL. Like the various filesystems available for

GNU/Linux, each storage engine has its own benefits and drawbacks. The server

communicates with them through the storage engine API. This interface hides differences

between storage engines and makes them largely transparent at the query layer.

The API contains a couple of dozen low-level functions that perform operations such

as “begin a transaction” or “fetch the row that has this primary key.” The storage

engines donrsquo;t parse SQL* or communicate with each other; they simply respond to

requests from the server.

Connection Management and Security

Each client connection gets its own thread within the server process. The connectionrsquo;s

queries execute within that single thread, which in turn resides on one core or

CPU. The server caches threads, so they donrsquo;t need to be created and destroyed for

each new connection.dagger;

Figure 1-1. A logical view of the MySQL server architecture

* One exception is InnoDB, which does parse foreign key definitions, because the MySQL server doesnrsquo;t yet

implement them itself.

dagger;MySQL AB plans to separate connections from threads in a future version of the server.

When clients (applications) connect to the MySQL server, the server needs to

authenticate them. Authentication is based on username, originating host, and password.

X.509 certificates can also be used across an Secure Sockets Layer (SSL) connection.

Once a client has connected, the server verifies whether the client has

privileges for each query it issues (e.g., whether the client is allowed to issue a SELECT

statement that accesses the Country table in the world database). We cover these topics

in detail in Chapter 12.

Optimization and Execution

MySQL parses queries to create an internal structure (the parse tree), and then

applies a variety of optimizations. These may include rewriting the query, determining

the order in which it will read tables, choosing which indexes to use, and so on.

You can pass hints to the optimizer through special keywords in the query, affecting

its decision-making process. You can also ask the server to explain various aspects of

optimization. This lets you know what decisions the server is making and gives you a

reference point for reworking queries, schemas, and settings to make everything run

as efficiently as possible. We discuss the optimizer in much more detail in Chapter 4.

The optimizer does not really care what storage engine a particular table uses, but

the storage engine does affect how the server optimizes query. The optimizer asks the

storage engine about some of its capabilities and the cost of certain operations, and

for statistics on the table data. For instance, some storage engines support index

types that can be helpful to certain queries. You can read more about indexing and

schema optimization in Chapter 3.

Before even parsing the query, though, the server consults the query cache, which

can store only SELECT statements, along with their result sets. If anyone issues a query

thatrsquo;s identical to one already in the cache, the server doesnrsquo;t need to parse, optimize,

or execute the query at all—it can s

剩余内容已隐藏,支付完成后下载完整资料


MySQL的架构与其他数据库服务器很不同,和很有用的一个广泛的用途。MySQL是不完美的,但它是灵活的足够的工作环境非常苛刻,如Web应用程序。在同时,MySQL可以发电的嵌入式应用,数据仓库,内容索引和交付软件,高可用冗余系统,在线交易处理(OLTP),以及更多。

从MySQL获得最多的,你需要了解它的设计使你可以用它来工作,而不是反对它。MySQL在许多方面是灵活的。例如,你可以配置它的范围广泛的硬件上运行,并支持各种数据类型。然而,MySQL的最不寻常的和重要的特征是它的存储引擎建筑,其设计和查询处理和其他服务器的任务数据存储和检索。在MySQL 5.1中,你甚至可以负载存储引擎运行时插件。这种关注点的分离,让你选择,每一个表的基础上,如何你的数据存储和什么样的性能,特点,和其他特性的你希望。

本章提供的MySQL服务器体系结构的一个高层次的概述,存储引擎之间的主要区别,以及为什么这些差异是重要的。我们试图通过简化细节和实例解释MySQL。本次讨论会的那些新的数据库服务器以及有用谁是与其他数据库服务器专家读者。

MySQL的逻辑架构

一个好的心理了解MySQL的组件一起工作会帮助你了解服务器。图1-1显示了MySQL的架构的逻辑视图。最上层包含不是唯一的mysql服务。他们的服务大多数基于网络的客户端/服务器工具或服务器需要连接处理,认证,安全,等等。

第二层是事情有趣的地方。很多MySQL的大脑在这里,包括解析查询,代码分析,优化,缓存,和所有内置的功能(例如,日期,时间,数学,和加密)。任何提供的功能在存储引擎的生活在这个水平:存储过程,触发器,视图,例如。

第三层包含的存储引擎。他们是负责存储和检索所有的数据存储在MySQL。如可用于各种文件系统GNU / Linux,每个存储引擎都有自己的优点和缺点。服务器与他们交流通过存储引擎API。这个接口隐藏的差异存储引擎之间,使他们在很大程度上透明查询层。这个API包含几十个低级函数完成操作“开始交易”或“行有这个主键读取存储。”引擎不解析SQL *或互相沟通;他们只是回应从服务器请求。

连接管理和安全

每个客户端连接都有它自己的线程在服务器进程。连接的在查询执行单线程,从而驻留在一个核心或CPU。服务器缓存的线程,所以他们不需要被创造和毁灭

每一个新的连接。dagger;

图1-1。在MySQL服务器架构的逻辑视图一个例外是InnoDB,并解析外键定义,因为MySQL服务器没有执行本身。

dagger;MySQL AB计划单独连接的线程在未来版本的服务器。当客户(应用程序)连接到MySQL服务器,服务器需要验证他们的身份。身份认证是基于用户名和密码,源主机。X.509证书也可以通过安全套接字层(SSL)连接。一旦客户端连接,服务器验证客户端是否对于每个查询问题的权限(例如,客户端是否允许发出的选择语句访问国表在世界数据库)。我们的这些主题在12章中详细。

并发控制

在多个查询需要同时更改数据,问题并发控制是。对于我们而言,在这一章中,MySQL来做这个在两个层次:服务器层和存储引擎的水平。并发控制是一个大的话题,大量的理论文献的身体投入,但这本书不是关于理论或者关于MySQL内部。因此,我们会给你一个简化对MySQL处理并发读写的概述,使你有你需要为本章的其余部分的背景。

我们将使用一个邮箱,一个UNIX系统为例。经典的mbox文件格式很简单。在本地邮箱的所有邮件都连接在一起,一个接一个。这使得它很容易读取和解析邮件。它也使邮件容易:只添加一个新的信息到文件结尾。但当两个进程试图在同一时间的传递消息同一邮箱?显然,可能损坏的邮箱,留下两个交错的消息

在邮箱文件结束。乖巧的邮件投递系统使用锁定防止腐败。如果客户端尝试第二分娩,邮箱是锁,它必须等待前提供信息获取锁本身。

该方案适用于实践,但它不支持并发。因为只有一个进程可以在任何时间更改邮箱,这一个高容量的邮箱有问题的方法变得。

读写锁

从邮箱不是阅读麻烦。有什么错的多客户阅读同一邮箱同时;因为他们没有改变,没有什么是容易出错。但是如果有人试图deletemessage数25,程序阅读邮箱时会发生什么?这取决于,但读者可以损坏或邮箱的观点不一致来吧。所以,为了安全起见,甚至阅读邮箱需要特殊照顾。如果你认为邮箱作为一个数据库表,每个邮件为一行,这是不难看出,问题是在这一背景下相同。在许多方面,邮箱是真的只是一个简单的数据库表。修改数据库表中的行是非常相似的拆卸或更换一个邮箱文件信息的内容。

并发控制的这个经典问题的解决方案是相当简单的。系统处理并发的读/写访问通常执行锁定系统由两锁类型。这些锁通常被称为共享锁和独占锁,锁或读写锁。

无需担心实际锁定技术,我们可以描述的概念如下。读锁是共享资源,或相互阻塞:很多客户可以在同一时间资源读互不干扰。

写锁,另一方面,是exclusive-i.e.,他们块读写锁锁和其他因为唯一安全的政策是有一个单一的客户写在给定的时间和资源来防止所有的读写时,客户端。

在数据库世界中,锁定发生的时间:MySQL具有防止一个客户从阅读的一块数据,而另一个是改变它。它执行这个锁在一个透明的方式大部分时间管理。

锁的粒度

为了提高共享资源的并发性的方法之一是将更多选择关于你的锁。而不是锁定整个资源,锁只有一部分包含您需要更改数据。更好的是,只锁定数据的精确块

你计划改变。最小化数据你锁在任何一个时间让我们改变一个给定的资源同时发生,只要他们不冲突彼此。

问题是锁的资源消耗。每得到一个锁锁操作,检查锁是免费的,释放锁,等有开销。如果系统花费太多的时间管理锁而不是存储和检索数据,性能会受到影响。

锁定策略之间的一种折衷的锁的开销和数据安全,并妥协对绩效的影响。大多数商业数据库服务器不给你太多的选择:你所谓的行级锁表中,与各种常复杂的方式给许多锁性能好。

MySQL,另一方面,也提供了选择。它的存储引擎可以实现自己的锁定策略和锁粒度。锁管理是非常重要的在存储引擎的设计决策;在一定的水平固定的粒度可以给对于某些使用性能更好,但使发动机不适合其他用途。

因为MySQL提供了多种存储引擎,它不需要一个单一的通用的解决方案。让我们在最重要的两个锁策略看。

表锁

最基本的锁定策略可以在MySQL,和一个最低架空,是表锁。表锁是类似于前面描述的邮箱锁:它锁定整个表。当客户希望写一个表格(插入,删除,更新,等等),它获得一个写锁。这使其他所有的读写操作在海湾。当没有人写,读者可以获得读锁,不冲突与其他读锁。

表锁有在特定情况下的良好性能的变化。例如,读取本地表锁允许某些类型的并发写操作。写锁锁也比读一个更高的优先级,所以一个写锁会要求提前到锁队列前面即使读者已经在队列(写锁可以在队列提前过去读锁,但不能提前过去读锁

写锁)。

虽然存储引擎可以管理自己的锁,MySQL本身也采用了多种锁,有效地用于各种目的表级。例如,在服务器使用一个语句,如修改表级锁,不管的存储引擎。

行锁

锁紧方式,提供最大的并发性(具有最大的开销)是行锁的使用。行级锁,这种策略通常被称,可在InnoDB和Falcon存储引擎,其中。行锁在存储引擎实现的,而不是服务器(参照逻辑架构图如果你需要)。服务器是完全不知道锁的实现

在存储引擎,而且,正如你将看到在本章的后面部分和整个这本书,所有的存储引擎实现锁定在他们自己的方式。

交易

你不能对一个数据库系统的更先进的功能,很长时间交易进入组合之前。事务是一组,SQL查询自动处理,作为一个工作单元。如果数据库引擎可以应用查询数据库的整个集团,它这样做,但是如果他们不能做由于碰撞或其他原因,没有他们的应用。它的全部或任何。

小本节是具体到MySQL。如果你已经熟悉ACID事务,随意跳到“交易数据库”在10页,后来在这章。

一个银行的应用是典型的例子,为什么交易是必要的。想象两表:支票和储蓄银行的数据库。将200美元简的支票帐户,她的储蓄账户,你需要至少完成三

步骤:

1。确保她的支票帐户余额大于200美元。

2。减去200美元从自己的支票帐户余额。

3。添加200美元平衡她的储蓄帐户。

整个操作应包装在一个事务中,如果任何一个步骤失败,任何已完成的步骤可以回滚。你开始在开始交易声明,然后是做交易改变永久提交或回滚更改丢弃。因此,该SQL我们样品的交易可能看起来像这样:

1开始交易;

2选择平衡检查,customer_id = 10233276;

3更新检查组平衡=资产200 customer_id = 10233276;

4更新储蓄余额=余额 200套,customer_id = 10233276;

5提交;

但交易本身并没有完整的故事。如果数据库服务器崩溃在执行4号线?谁知道呢?客户可能损失200美元。如果另一个进程来沿线3和4并删除整个帐户之间的平衡?银行给了客户200美元的信贷甚至不知道。

交易不够除非系统通过酸试验。酸代表原子性,一致性,隔离,和耐久性。这些紧密相关的标准一个好的事务处理系统必须满足:

原子性

一个事务必须作为一个不可分割的工作单元,使整个交易申请或回滚。当事务是原子的,有有没有这样的东西作为一个部分完成的事务:它的全部或任何。

一致性

数据库从一个一致性状态应该移动到下一个。在我们的例如,一致性保证碰撞线3和4没有结果200美元的支票账户消失。因为交易是永远承诺,对交易的变化不总是体现在数据库。

隔离

一个事务的结果通常是看不见的到其他交易交易完成。这保证了如果一个银行账户汇总后运行3号线在4号线在我们的例子中,它仍然会看到200美元的支票

帐户。我们讨论的隔离级别时,你就会明白为什么我们说通常看不见的。

耐久性

一旦承诺,交易的变化是永久性的。这意味着变化必须记录,数据不会丢失,在系统崩溃。耐久性是一个有点模糊的概念,然而,因为实际上有很多层面。

一些耐久性策略提供了更强的安全保障,没有什么是永远100%耐用。我们真的是在讨论什么耐久性在后面的章节中的MySQL,特别是在“InnoDB I/O调优”283页。酸的交易,确保银行不要失去你的钱。它通常是非常很难或不可能做这个应用程序逻辑。酸式数据库服务器要处理各种复杂的事情你可能不了解提供。

酸的保证

正如增加锁的粒度,这额外的安全,缺点是,数据库服务器必须做更多的工作。一种酸交易数据库服务器也通常需要更多的CPU功率,内存,磁盘空间比没有

他们。我们已经说了好几次,这是MySQL的存储引擎体系结构是你的优势。你可以决定你的应用程序需要的交易。

如果你真的不需要他们,你可能会得到更高的性能用于查询各种非事务性存储引擎。你可以使用锁表给保护水平,你需要无交易。它的一切都取决于你。

隔离级别

隔离比看起来更复杂。的SQL标准定义了四个隔离级别,具体的规则,这变化是不是内外可见交易。较低的隔离级别通常允许更高的并发性和较低的

开销。

每个存储引擎实现了隔离级别略有不同,他们不一定符合你会如果你用期待

到另一个数据库产品(因此,我们不会去考虑细节的详尽在这一节)。你应该阅读手册,无论存储你决定用发动机。

让我们在四个隔离级别一眼:

未提交读

在未提交读隔离级别的事务,可以查看结果未提交的事务。在这个层面上,许多问题都可以发生除非你真的,真的知道你在做什么,有一个好理由。这

水平是在实践中很少使用,因为它的性能并不比另一层面,它有许多优点。读取未提交的数据也被称为脏读。

对于大多数数据库的默认隔离级别(而不是MySQL!)读承诺。它满足隔离早期使用简单的定义:一个交易只能看到那些变化的交易已经做到了

当它开始,它的变化不会被其他人看到直到它已承诺。这一水平仍允许所谓的不可重复读。这意味着你可以运行相同的两次发言和看到不同的数据。

可重复读

可重复读解决了未提交读允许。它保证一个事务读取的任何行“一样”在随后的读取在相同的事务,但是在理论上仍然允许另一个棘手的问题:幻读。简单地说,一个幽灵可以发生在当你选择一些范围的行,另一个事务插入新的一行到范围,然后你选择相同的范围了;你将看到新的“幻影”行。InnoDB和猎鹰和多版本并发解决幻读问题控制,这说明在本章的后面。

可重复读是MySQL的默认的事务隔离级别。InnoDB和Falcon存储引擎尊重这个设置,您将学习如何改变6章。其他一些存储引擎做过,而是选择了发动机。

序列化

最高级别的隔离,可串行化,解决了幻读的问题强迫交易是有序的,他们不可能冲突。一言以蔽之,序列化的地方每行读取锁。在这个层面上,很多超时和锁争用可能发生。我们很少看到人们使用这个隔离级别,但您的应用程序的需求可能会迫使你在结果数据的稳定性有利于接受减少并发。

表1-1总结了各种隔离级别和与之相关的缺陷每一个。

死锁

死锁是指两个或两个以上相互持股和交易请求对同一资源的锁,创造一个循环的依赖。死锁发生时交易试图锁定资源

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[499568],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。