支撑现代分布式存储系统的算法

教程大全 2025-07-19 11:54:27 浏览

支撑现代分布式存储系统的算法

2019-05-13 15:20:42随着应用程序处理的数据量不断增长,扩展存储变得愈发具有挑战性。每个数据库系统都有自己的方案。为了从这些方案中做出正确的选择,了解它们是至关重要的。

随着应用程序处理的数据量不断增长,扩展存储变得愈发具有挑战性。每个数据库系统都有自己的方案。为了从这些方案中做出正确的选择,了解它们是至关重要的。

每个应用程序在读写负载平衡、一致性、延迟和访问模式方面各不相同。熟悉数据库和底层存储能帮助你进行架构决策、解释系统行为、排除故障以及根据具体情况调优。

优化一个系统不可能做到面面俱到。我们当然希望有一个数据结构既能保证***的读写性能,又不需要任何存储开销,但显然,这是不存在的。

本文深入讨论了大多数现代数据库中使用的两种存储系统设计 —— 读优化 B-Tree [1] 和写优化 LSM(log-structured merge)-Tree [5] —— 并描述了它们的用例和优缺权衡。

B-Tree 是一种流行的读优化索引数据结构,是二叉树的泛化。它有许多变种,并且被用于多种数据库(包括 MySQL InnoDB [4]、PostgreSQL [7])甚至文件系统(HFS+ [8]、HTrees ext4 [9])。B-Tree 中的 B 代表原始数据结构的作者 Bayer,或是他当时就职的公司 Boeing。

在搜索二叉树中,每个节点都有两个孩子(称为左右孩子)。左子树的节点值小于当前节点值,右子树反之。为了保持树的深度最小,搜索二叉树必须是平衡的:当随机顺序的值被添加到树中时,如果不加调整,终会导致树的倾斜。

一种平衡二叉树的方法是所谓的旋转:重新排列节点,将较深子树的父节点向下推到其子节点下方,并将该子节点拉上来,将其放在原父节点的位置。图 1 是平衡二叉树中的旋转示例。在左侧添加节点 2 后,二叉树失去平衡。为了使该树平衡,将其以节点 3 为轴旋转(树围绕它旋转)。然后节点 5(旋转前是根节点和节点 3 的父节点)成为其子节点。旋转完成后,左侧子树的深度减少 1,右侧子树的深度增加 1。树的***深度已经减小。

二叉树是最有用的内存数据结构。然而由于平衡(保持所有子树的深度最小)和低出度(每个节点最多两个子节点),它们在磁盘上水土不服。B-Tree 允许每个节点存储两个以上的指针,并通过将节点大小与页面大小(例如,4 KB)进行匹配来与块设备协同工作。今天的一些实现将使用更大的节点大小,跨越多个页面。

B-Tree 有以下几个性质:

• 有序。这允许顺序扫描并简化查找。

• 自平衡。在插入和删除时不需要平衡树:当 B-Tree 节点已满时,它被分成两部分,并且当相邻节点的利用率低于某个阈值时,合并这两个节点。这也意味着各叶子节点与根节点的距离相等,并且在查找过程中定位的步数是相同的。

• 对数级查找时间复杂度。查找时间是非常重要的,这使得 B-Tree 成为数据库索引的理想选择。

• 易变。插入、更新、删除(包括因此导致的拆分和合并)过程在磁盘上进行。为了使就地更新成为可能,需要一定的空间开销。B-Tree 可以作为聚集索引,实际数据存储在叶子节点上,也可以作为非聚集索引,称为一个堆文件。

本文讨论的 B+Tree [3] 是一种经常用于数据库存储的 B-Tree 现代变种。B+Tree 与原始 B-Tree [1] 的不同之处在于:(1)它采用额外链接的叶节点存储值;(2)值不能存储在内部节点上。

剖析 B-Tree

我们先来仔细看看 B-Tree 的结构,如图 2 所示。B-Tree 的节点有几种类型:根节点,内部节点和叶子节点。根节点(顶部)是没有双亲的节点(即,它不是任何节点的子节点)。内部节点(中间)有双亲和孩子节点;他们将根节点和叶子节点连接起来。叶子节点(底部)持有数据并且没有孩子节点。图 2 描绘了分支因子为 4(4 个指针,内部节点中有 3 个键,叶上有 4 个键/值对)的 B-Tree。

B-Tree 的特性如下:

• 分支因子 —— 指向子节点的指针数(N)。除指针外,根节点和内部节点还持有 N-1 个键。

• 利用率 —— 节点当前持有的指向子节点的指针数量与可用***值之比。例如,若某树分支因子是 N,且其中某节点当前持有 N/2 个指针,则该节点利用率为 50%。

• 高度 —— B-Tree 的数量级,表示在查找过程中必须经过多少指针。

树中的每个非叶节点最多可持有 N 个键(索引条目),这些键将树分为 N+1 个子树,这些子树可以通过相应的指针定位。项 Ki 中的指针 i 指向某子树,该子树中包含所有 Ki-1 <= K目标 < Ki(其中 K 是一组键)的索引项。首尾指针是特殊的,它们指向的子树中所有的项都小于等于最左子节点的 K0 或大于最右子节点的 KN-1。叶子节点同时持有其同级前后节点的指针,形成兄弟节点间的双向链表。所有节点中的键总是有序的。

查找

进行查找时,将从根节点开始搜索,并经过内部节点递归向下到叶子节点层。在每层中,通过指向子节点的指针将搜索范围缩小到某子树(包含搜索目标值的子树)。图 3 展示了 B-Tree 的一次从根到叶的搜索过程,指针在两个键之间,其中一个大于(或等于)搜索目标,另一个小于搜索目标。进行点查询时,搜索将在定位到叶子节点后完成。进行范围扫描时,遍历所找到的叶子节点的键和值,然后遍历范围内的兄弟叶子节点。

在复杂度方面,B-Tree 保证查询的时间复杂度为 log(n),因为查找一个节点中的键使用二分查找,如图 4 所示。二进制搜索可以通俗的解释为在字典中查找以某字母开头的单词,字典中所有单词都按字母顺序排序。首先你翻开正好在字典中间的一页。如果要查找的单词字母顺序小于(在前面)当前页,你继续在字典的左半边查找;否则就继续在右半边查找。你继续像这样将剩余的页码范围分为一半,选择一边,直到找到期望的字母。每一步都将搜索范围减半,因此查找的时间复杂度为对数级。 B-Tree 节点上的键是有序的,且使用二分查找算法进行匹配,因此 B-Tree 的搜索复杂度是对数级的。这也说明了保持树的高利用率和统一访问的重要性。

插入、更新、删除

进行插入时,***步是定位目标叶子节点。此过程使用前序搜索算法。在定位目标叶子节点后,键和值将被添加至该节点。如果该节点没有足够的可用空间,这种情况称为溢出,则将叶子节点分割成两部分。这是通过分配一个新的叶子节点,将一半元素移动到新节点并将一个指向这个新节点的指针添加到父节点来完成的。如果父节点没有足够的空间,则也会在父节点上进行分割。操作一直持续到根节点为止。当根节点溢出时,其内容在新分配的节点之间被分割,根节点本身被覆盖以避免重定位。这也意味着树(及其高度)总是通过分裂根节点而增长。

结构化日志合并树是一个不可变的基于磁盘的写优化数据结构。它适用于写入比查询操作更频繁的场景。LSM-Tree 已经获得了更多的关注,因为它可以避免随机插入,更新和删除。

剖析 LSM-Tree

为了允许连续写入,LSM-Tree 在内存中的表(通常使用支持查找的时间复杂度为对数级的数据结构,例如二叉搜索树或跳跃表)中批量写入和更新,当其大小达到阈值时将它写在磁盘上(这个操作称为刷新)。检索数据时需要搜索树所有磁盘中的部分,检查内存中的表,合并它们的内容,然后再返回结果。图 5 展示了 LSM-Tree 的结构:用于写入的基于内存的表。只要内存表体积达到一定程度,内存表就会被写入磁盘。进行读取时,同时读取磁盘和内存表,通过一个合并操作来整合数据。

有序串行表

因为 SSTable(有序串行表)的简单性(易于写入,搜索和读取)与合并性能(合并期间,扫描源 SSTable,合并结果的写入是顺序的),多数现代的 LSM-Tree 实现(例如 RocksDB 和 Apache Cassandra)都选用 SSTable 作为硬盘表。

SSTable 是一种基于硬盘的有序不可变的数据结构。从结构上来看,SSTable 可以分为两部分:数据块和索引块,如图 6 所示。数据块包含以键为顺序写入的唯一键值对。索引块包含映射到数据块指针的键,指针指向实际记录的位置。为了快速搜索,索引一般使用优化的结构实现,例如 B-Tree 或用于点查询的哈希表。SSTable 中的每一个值都有一个时间戳与之对应。时间戳记录了插入、更新(这两者一般不做区分)和删除时间。

SSTable 具有以下优点:

• 通过查询主键索引可以实现快速的点查询(例如,通过键寻找值)。

• 只需要顺序读取数据块上的键值对就可以实现扫描(例如,遍历制定范围内的键值对)。

SSTable 代表一段时间内所有数据库操作的快照,因为 SSTable 是通过对内存表的刷新操作创建的,该表充当此时段内对数据库状态的缓冲区。

查询

检索数据需要搜索硬盘上的所有 SSTable,检查内存表,并且合并它们的内容后返回结果。要搜索的数据可以存储在多个 SSTable 中,因此合并步骤是必须的。

合并步骤也是确保删除和更新正常工作所必需的。在 LSM-Tree 中,通过插入占位符(通常称为墓碑)来指定哪个键被标记为删除。同样的,更新操作只是提交一个带较晚时间戳的记录。在读取期间,被标记删除的记录被跳过,不会返回给客户端。更新操作与之类似:在具有相同键的两个记录中,只返回具有较晚时间戳的记录。图 7 展示了一次合并操作,用于对在不同表中存储的同一个键的数据进行整合:如图,Alex 记录中时间戳是 100,随后更新了新的电话,时间戳为 200;John 记录被删除。另外两项没有改变,因为它们没有被覆盖。

为了减少搜索 SSTable ,防止为了查找某个键而搜索每个 SSTable,许多存储系统采用一个被称为布隆过滤器 [10] 的数据结构。这是一个概率数据结构,可用于测试某个元素是否属于某集合。它有可能产生错误的肯定(即,判断元素是集合的成员,但实际上并不是),但不能产生错误的否定(即,如果返回否定结果,则元素一定不是集合的成员)。换句话说,布隆过滤器用于判断键“可能在 SSTable 中”或“绝对不在 SSTable 中”。在搜索过程中,将会跳过布隆过滤器返回否定结果的 SSTable。

LSM-Tree 的维护

由于 SSTable 是不可变的,因此它们会按顺序写入,并且不存在用于修改的预留空白空间。这就意味着插入、更新或删除操作将需要重写整个文件。所有修改数据库状态的操作都在内存表中“批处理”。随着时间的推移,磁盘表的数量将增加(同一个键的数据位于几个不同文件,同一记录有多个不同的版本,被删除的冗余记录),读取操作的开销将变得越来越大。

为了降低读取开销,整合被删除记录占用的空间并减少磁盘表的数量,LSM-Tree 需要一个压缩操作,从磁盘读取完整的 SSTable 并合并它们。由于 SSTable 是以键排序的,因此其压缩工作和归并排序类似,是非常高效的操作:从多个源有序序列中读取记录,进行合并后的输出马上追加到结果文件中,则结果文件也是有序的。归并排序的一个优点是,即使合并内存吃不消的大文件,它依旧可以高效地工作。结果表保留了原始 SSTable 的顺序。

在此过程中,被合并的 SSTable 被丢弃并替换为其“压缩”后的版本,如图 8 所示。压缩多个 SSTable 并将它们合并为一个。某些数据库系统在逻辑层面上按大小把不同的表分为不同级别,分组到相同的“级别”,并在特定级别的表足够多时开始合并操作。压缩后,SSTable 的数量减少,提高查询效率。

原子性与持久性

为了减少 I/O 操作并使它们顺序执行,无论是 B-Tree 还是 LSM-Tree 都在实际更新之前,先在内存中进行批量操作。这意味着,在故障情况时,数据完整性、原子性(将一系列操作赋予原子性,将它们视为一个操作,要么全部执行要么全不执行)、持久性(当进程崩溃或电源失效时,可以确保数据已经到达持久性存储设备)得不到保证。

为了解决这个问题,大多数现代存储系统采用 WAL(预写日志)。WAL 的核心思想是,所有数据库状态改变都先持久化进硬盘中的只追加日志中。如果进程在工作中崩溃,将会重映日志以确保没有数据丢失且所有更改都满足原子性。

在 B-Tree 中,使用 WAL 可以理解为仅在写入操作被记录后才将其写入数据文件。通常,B-Tree 存储系统的日志尺寸相对较小:只要将更改应用于持久存储,它们就可以被弃用。WAL 还可以作为运行时操作的备份:任何未应用于数据页的更改都可以根据日志记录重做。

在 LSM-Tree 中,WAL 用于保存处于内存表但尚未完全刷新到磁盘上的更改。只要内存表被刷新完毕并置换,便可以在新创建的 SSTable 中进行读取操作,则 WAL 中从内存表刷新到硬盘上的那部分更改就可以丢弃了。

总结

B-Tree 和 LSM-Tree 数据结构***的差异之一是它们优化的目的以及优化的效果。

我们来对比一下 B-Tree 和 LSM-Tree 之间的特性。总的来说,B-Tree 具有以下特性:

• 它是可变的,它允许通过一些空间开销和更多的写入路径来进行就地更新,因而它不需要文件重写或多源合并。

• 它是读优化的,这意味着它不需要从多个源数据中读取(也不需要合并),因而简化了读取路径。

• 写操作可能引起级联节点分裂,这使得写操作开销较高。

• 它针对分页环境(块存储)进行了优化,杜绝了字节定位操作。

• 碎片化, 由频繁更新造成的碎片化可能需要额外的维护和块重写。然而对 B-Tree 的维护一般要比 LSM-Tree 要少。

• 并发访问读写隔离,这涉及锁存器与锁链。

LSM-Tree 具有以下特性:

• 它是不可变的。SSTable 一旦被写入硬盘就不会再改变。压缩操作被用于整合占用空间,删除条目,合并在不同数据文件中的同键数据。作为压缩操作的一部分,在成功合并后,源 SSTable 将被弃用并删除。这种不可变性给我们带来了另一个有用的特性,刷新后的表可以被并发访问。

支撑现代分布式存储系统的算法

• 它是写优化的,这意味着写入操作将进入缓冲,随后顺序刷新到硬盘上,可能支持基于硬盘的空间局部性。

• 读取操作可能需要访问多个数据源,因为在不同时间写入的同一个键的数据有可能位于不同的数据文件中。必须经过合并过程才能将记录返回给客户端。

• 需要维护 / 压缩,因为缓冲中的写入操作被刷新到硬盘上。

评估存储系统

开发存储系统总要面对类似的挑战,考虑类似的因素。决定优化方向会对结果产生很大影响。你可以在写入过程中花费更多时间来布局结构以实现更高效的读取,为就地更新预留空间,也可以缓冲数据确保顺序写入以提高写入速度。但是,一次完成这一切是不可能的。理想中的存储系统应该具有***的读取成本,***的写入成本,并且没有额外开销。但实际上,数据结构只能在多个因素之间权衡。理解这些取舍是重要的。

来自哈佛 DASlab(数据系统实验室)的研究人员总结了数据库系统优化方向的关键三点:读取开销、更新开销和内存开销(或简称为 RUM)。对于数据结构、访问方法、甚至适用于某些工作负载的选择应该了解哪些参数对你的用例最为重要,因为算法是针对特定用例量身定制的。

RUM 假说 [2] 为上述的两种开销设置了上限,同时为第三种设置了下限。例如,B-Tree 以提高写入开销、预留空间(同时也造成了内存开销)为代价进行读优化。LSM-Tree 以读取时必须进行多硬盘表访问的高读取开销换取低写入开销。在处于竞争三角形的三个参数中,一方面的改进可能就意味着另一方面的让步。图 9 对 RUM 假说进行了说明。

B-Tree 优化读取性能:索引的布局方式可以最小化遍历树的磁盘访问需求。通过访问一个索引文件就可以定位数据。这是通过持续更新索引文件来实现的,但这也增加了由于节点拆分和合并,重定位以及碎片、不平衡相关的维护造成的额外写入开销。为了平稳更新成本并减少分割次数,B-Tree 在所有级别的节点上都预留有额外的空间。这有助于在节点饱和之前延迟写入开销的增长。简而言之,B-Tree 牺牲更新和内存性能以获得更好的读取性能。

LSM-Tree 优化写入性能。无论是更新还是删除都需要在磁盘上定位数据(B-Tree 也一样),并且它通过在内存表中缓存所有插入,更新和删除操作来保证顺序写入。这是以较高的维护成本和压缩需求(这是唯一的缓解不断增长的读取开销和减少磁盘表的数量的方式)和更高的读取成本(因为数据必须从多个源读取并合并)为代价的。同时,LSM-Tree 通过不保留任何预留空间来减少内存开销(不同于 B-Tree 节点,其平均利用率为 70%,包含就地更新所需的开销),因为更高的利用率和最终文件的不变性,LSM-Tree 支持块压缩。简而言之,LSM-Tree 牺牲读取性能,提高维护成本来获得更好的写入性能和更低的内存占用。

有的数据结构可针对每个期望的属性进行优化。使用自适应数据结构可以以更高维护成本获得更好的读取性能。添加有助于遍历的元数据(如分散层叠)将会影响写入时间并占用更多空间,但可以提高读取性能。使用压缩优化内存使用率(例如,Gorilla 压缩 [6] 、delta 编码等诸多算法)会增加一些开销,用于在写入时压缩数据并在读取时解压缩数据。有时候,你可以牺牲功能来提高效率。例如,堆文件和散列索引由于文件格式简单,可以保证很好的性能和较小的空间开销,而作为代价,它们不支持除点查询以外的其他功能。你还可以通过使用近似数据结构(如布隆过滤器、HyperLogLog、Count-Min sketch 等)来为了空间与效率牺牲精度。

三种可变参数 —— 读取,更新和内存开销 —— 可以帮助你评估数据库并深入了解最适合的工作负载。它们都非常直观,将存储系统按其分类很容易,猜测它是如何执行的,然后通过大量测试验证你的假设。

当然,评估存储系统时还有一些其他重要因素需要考虑,例如维护开销,易用性,系统要求,频繁增删的适应性,访问模式等。RUM 假说只是帮助发展直观感觉并提供初始方向的一条经验法则。了解你的工作部件是构建可扩展后端的***步。

一些因素可能因实施而异,甚至两个使用类似存储设计原则的数据库可能会有不同表现。数据库是包含许多可插拔模块的复杂系统,是许多应用程序的重要组成部分。这些信息将帮助你窥探数据库的底层,并且了解底层数据结构和其内部行为之间的差异,从而决定哪个是最适合你的。


oracle数据库的后台进程有哪些

DBWR进程:该进程执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个ORACLE后台进程。 当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,DBWR的主要任务是将“弄脏”的缓冲区写入磁盘,使缓冲区保持“干净”。 由于缓冲存储区的缓冲区填入数据库或被用户进程弄脏,未用的缓冲区的数目减少。 当未用的缓冲区下降到很少,以致用户进程要从磁盘读入块到内存存储区时无法找到未用的缓冲区时,DBWR将管理缓冲存储区,使用户进程总可得到未用的缓冲区。 ORACLE采用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持内存中的数据块是最近使用的,使I/O最小。 在下列情况预示DBWR 要将弄脏的缓冲区写入磁盘:当一个服务器进程将一缓冲区移入“弄脏”表,该弄脏表达到临界长度时,该服务进程将通知DBWR进行写。 该临界长度是为参数DB-BLOCK-WRITE-BATCH的值的一半。 当一个服务器进程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT缓冲区时,没有查到未用的缓冲区,它停止查找并通知DBWR进行写。 出现超时(每次3秒),DBWR 将通知本身。 当出现检查点时,LGWR将通知DBWR.在前两种情况下,DBWR将弄脏表中的块写入磁盘,每次可写的块数由初始化参数DB-BLOCK- WRITE-BATCH所指定。 如果弄脏表中没有该参数指定块数的缓冲区,DBWR从LUR表中查找另外一个弄脏缓冲区。 如果DBWR在三秒内未活动,则出现超时。 在这种情况下DBWR对LRU表查找指定数目的缓冲区,将所找到任何弄脏缓冲区写入磁盘。 每当出现超时,DBWR查找一个新的缓冲区组。 每次由DBWR查找的缓冲区的数目是为寝化参数DB-BLOCK- WRITE-BATCH的值的二倍。 如果数据库空运转,DBWR最终将全部缓冲区存储区写入磁盘。 在出现检查点时,LGWR指定一修改缓冲区表必须写入到磁盘。 DBWR将指定的缓冲区写入磁盘。 在有些平台上,一个实例可有多个DBWR.在这样的实例中,一些块可写入一磁盘,另一些块可写入其它磁盘。 参数DB-WRITERS控制DBWR进程个数。 LGWR进程:该进程将日志缓冲区写入磁盘上的一个日志文件,它是负责管理日志缓冲区的一个ORACLE后台进程。 LGWR进程将自上次写入磁盘以来的全部日志项输出,LGWR输出:当用户进程提交一事务时写入一个提交记录。 每三秒将日志缓冲区输出。 当日志缓冲区的1/3已满时将日志缓冲区输出。 当DBWR将修改缓冲区写入磁盘时则将日志缓冲区输出。 LGWR进程同步地写入到活动的镜象在线日志文件组。 如果组中一个文件被删除或不可用,LGWR 可继续地写入该组的其它文件。 日志缓冲区是一个循环缓冲区。 当LGWR将日志缓冲区的日志项写入日志文件后,服务器进程可将新的日志项写入到该日志缓冲区。 LGWR 通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。 注意:有时候当需要更多的日志缓冲区时,LWGR在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。 ORACLE使用快速提交机制,当用户发出COMMIT语句时,一个COMMIT记录立即放入日志缓冲区,但相应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入数据文件。 当一事务提交时,被赋给一个系统修改号(SCN),它同事务日志项一起记录在日志中。 由于SCN记录在日志中,以致在并行服务器选项配置情况下,恢复操作可以同步。 CKPT进程:该进程在检查点出现时,对全部数据文件的标题进行修改,指示该检查点。 在通常的情况下,该任务由LGWR执行。 然而,如果检查点明显地降低系统性能时,可使CKPT进程运行,将原来由LGWR进程执行的检查点的工作分离出来,由 CKPT进程实现。 对于许多应用情况,CKPT进程是不必要的。 只有当数据库有许多数据文件,LGWR在检查点时明显地降低性能才使CKPT运行。 CKPT进程不将块写入磁盘,该工作是由DBWR完成的。 初始化参数CHECKPOINT-PROCESS控制CKPT进程的使能或使不能。 缺省时为FALSE,即为使不能。 SMON进程:该进程实例启动时执行实例恢复,还负责清理不再使用的临时段。 在具有并行服务器选项的环境下,SMON对有故障CPU或实例进行实例恢复。 SMON进程有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。 PMON进程:该进程在用户进程出现故障时执行进程恢复,负责清理内存储区和释放该进程所使用的资源。 例:它要重置活动事务表的状态,释放封锁,将该故障的进程的ID从活动进程表中移去。 PMON还周期地检查调度进程(DISPATCHER)和服务器进程的状态,如果已死,则重新启动(不包括有意删除的进程)。 PMON有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。 RECO进程:该进程是在具有分布式选项时所使用的一个进程,自动地解决在分布式事务中的故障。 一个结点RECO后台进程自动地连接到包含有悬而未决的分布式事务的其它数据库中,RECO自动地解决所有的悬而不决的事务。 任何相应于已处理的悬而不决的事务的行将从每一个数据库的悬挂事务表中删去。 当一数据库服务器的RECO后台进程试图建立同一远程服务器的通信,如果远程服务器是不可用或者网络连接不能建立时,RECO自动地在一个时间间隔之后再次连接。 RECO后台进程仅当在允许分布式事务的系统中出现,而且DISTRIBUTED ?C TRANSACTIONS参数是大于进程:该进程将已填满的在线日志文件拷贝到指定的存储设备。 当日志是为ARCHIVELOG使用方式、并可自动地归档时ARCH进程才存在。 LCKn进程:是在具有并行服务器选件环境下使用,可多至10个进程(LCK0,LCK1……,LCK9),用于实例间的封锁。 Dnnn进程(调度进程):该进程允许用户进程共享有限的服务器进程(SERVER PROCESS)。 没有调度进程时,每个用户进程需要一个专用服务进程(DEDICATEDSERVER PROCESS)。 对于多线索服务器(MULTI-THREADED SERVER)可支持多个用户进程。 如果在系统中具有大量用户,多线索服务器可支持大量用户,尤其在客户_服务器环境中。 在一个数据库实例中可建立多个调度进程。 对每种网络协议至少建立一个调度进程。 数据库管理员根据操作系统中每个进程可连接数目的限制决定启动的调度程序的最优数,在实例运行时可增加或删除调度进程。 多线索服务器需要SQL*NET版本2或更后的版本。 在多线索服务器的配置下,一个网络接收器进程等待客户应用连接请求,并将每一个发送到一个调度进程。 如果不能将客户应用连接到一调度进程时,网络接收器进程将启动一个专用服务器进程。 该网络接收器进程不是ORACLE实例的组成部分,它是处理与ORACLE有关的网络进程的组成部分。 在实例启动时,该网络接收器被打开,为用户连接到ORACLE建立一通信路径,然后每一个调度进程把连接请求的调度进程的地址给予于它的接收器。 当一个用户进程作连接请求时,网络接收器进程分析请求并决定该用户是否可使用一调度进程。 如果是,该网络接收器进程返回该调度进程的地址,之后用户进程直接连接到该调度进程。 有些用户进程不能调度进程通信(如果使用SQL*NET以前的版本的用户),网络接收器进程不能将如此用户连接到一调度进程。 在这种情况下,网络接收器建立一个专用服务器进程,建立一种合适的连接.即主要的有:DBWR,LGWR,SMON 其他后台进程有PMON,CKPT等

SQL server 2000 和 2005有什么区别?

数据库管理10个最重要的特点特点 描述数据库镜像通过新数据库镜像方法,将记录档案传送性能进行延伸。 您将可以使用数据库镜像,通过将自动失效转移建立到一个待用服务器上,增强您SQL服务器系统的可用性。 在线恢复使用SQL2005版服务器,数据库管理人员将可以在SQL服务器运行的情况下,执行恢复操作。 在线恢复改进了SQL服务器的可用性,因为只有正在被恢复的数据是无法使用的,而数据库的其他部分依然在线、可供使用。 在线检索操作在线检索选项可以在指数数据定义语言(DDL)执行期间,允许对基底表格、或集簇索引数据和任何有关的检索,进行同步修正。 例如,当一个集簇索引正在重建的时候,您可以对基底数据继续进行更新、并且对数据进行查询。 快速恢复新的、速度更快的恢复选项可以改进SQL服务器数据库的可用性。 管理人员将能够在事务日志向前滚动之后,重新连接到正在恢复的数据库。 安全性能的提高SQL Server 2005包括了一些在安全性能上的改进,例如数据库加密、设置安全默认值、增强密码政策、缜密的许可控制、以及一个增强型的安全模式。 新的SQL Server Management StudioSQL Server 2005引入了SQL Server Management Studio,这是一个新型的统一的管理工具组。 这个工具组将包括一些新的功能,以开发、配置SQL Server数据库,发现并修理其中的故障,同时这个工具组还对从前的功能进行了一些改进。 专门的管理员连接SQL Server 2005将引进一个专门的管理员连接,即使在一个服务器被锁住,或者因为其他原因不能使用的时候,管理员可以通过这个连接,接通这个正在运行的服务器。 这一功能将能让管理员,通过操作诊断功能、或Transact—SQL指令,找到并解决发现的问题。 快照隔离我们将在数据库层面上提供一个新的快照隔离(SI)标准。 通过快照隔离,使用者将能够使用与传统一致的视野观看数据库,存取最后执行的一行数据。 这一功能将为服务器提供更大的可升级性。 数据分割数据分割 将加强本地表检索分割,这使得大型表和索引可以得到高效的管理。 增强复制功能对于分布式数据库而言,SQL Server 2005提供了全面的方案修改(DDL)复制、下一代监控性能、从甲骨文(Oracle)到SQL Server的内置复制功能、对多个超文本传输协议(http)进行合并复制,以及就合并复制的可升级性和运行,进行了重大的改良。 另外,新的对等交易式复制性能,通过使用复制,改进了其对数据向外扩展的支持。 有关开发的10个最重要的特点特点 描述 框架主机使用SQL Server 2005,开发人员通过使用相似的语言,例如微软的Visual C# 和微软的Visual Basic,将能够创立数据库对象。 开发人员还将能够建立两个新的对象——用户定义的类和集合。 XML 技术在使用本地网络和互联网的情况下,在不同应用软件之间散步数据的时候,可扩展标记语言(XML)是一个重要的标准。 SQL Server 2005将会自身支持存储和查询可扩展标记语言文件。 2.0 版本从对SQL类的新的支持,到多活动结果集(MARS),SQL Server 2005中的将推动数据集的存取和操纵,实现更大的可升级性和灵活性。 增强的安全性SQL Server 2005中的新安全模式将用户和对象分开,提供fine-grain access存取、并允许对数据存取进行更大的控制。 另外,所有系统表格将作为视图得到实施,对数据库系统对象进行了更大程度的控制。 Transact-SQL 的增强性能SQL Server 2005为开发可升级的数据库应用软件,提供了新的语言功能。 这些增强的性能包括处理错误、递归查询功能、关系运算符PIVOT, APPLY, ROW_number和其他数据列排行功能,等等。 SQL 服务中介SQL服务中介将为大型、营业范围内的应用软件,提供一个分布式的、异步应用框架。 通告服务通告服务使得业务可以建立丰富的通知应用软件,向任何设备,提供个人化的和及时的信息,例如股市警报、新闻订阅、包裹递送警报、航空公司票价等。 在SQL Server 2005中,通告服务和其他技术更加紧密地融合在了一起,这些技术包括分析服务、SQL Server Management Studio。 Web服务使用SQL Server 2005,开发人员将能够在数据库层开发Web服务,将SQL Server当作一个超文本传输协议(HTTP)侦听器,并且为网络服务中心应用软件提供一个新型的数据存取功能。 报表服务利用SQL Server 2005, 报表服务可以提供报表控制,可以通过Visual Studio 2005发行。 全文搜索功能的增强SQL SERVER 2005将支持丰富的全文应用软件。 服务器的编目功能将得到增强,对编目的对象提供更大的灵活性。 查询性能和可升级性将大幅得到改进,同时新的管理工具将为有关全文功能的运行,提供更深入的了解。 有关商业智能特征的10个最重要的特点特点 描述分析服务SQL SERVER 2005的分析服务迈入了实时分析的领域。 从对可升级性性能的增强、到与微软Office软件的深度融合,SQL SERVER 2005将帮助您,将商业智能扩展到您业务的每一个层次。 数据传输服务(DTS)DTS数据传输服务是一套绘图工具和可编程的对象,您可以用这些工具和对象,对从截然不同来源而来的数据进行摘录、传输和加载(ETL),同时将其转送到单独或多个目的地。 SQL SERVER 2005将引进一个完整的、数据传输服务的、重新设计方案,这一方案为用户提供了一个全面的摘录、传输和加载平台。 数据挖掘我们将引进四个新的数据挖掘运算法,改进的工具和精灵,它们会使数据挖掘,对于任何规模的企业来说,都变得简单起来。 报表服务在SQL SERVER 2005中,报表服务将为在线分析处理(OLAP)环境提供自我服务、创建最终用户特别报告、增强查询方面的开发水平,并为丰富和便于维护企业汇报环境,就允许升级方面,提供增进的性能。 集群支持通过支持容错技术移转丛集、增强对多重执行个体的支持、以及支持备份和恢复分析服务对象和数据,分析服务改进了其可用性。 主要运行指标主要运行指标(KPIs)为企业提供了新的功能,使其可以定义图表化的、和可定制化的商业衡量标准,以帮助公司制定和跟踪主要的业务基准。 可伸缩性和性能并行分割处理,创建远程关系在线分析处理(ROLAP)或混合在线分析处理(HOLAP)分割,分布式分割单元,持续计算,和预制缓存等特性,极大地提升了SQL Server 2005中分析服务的可伸缩性和性能。 单击单元当在一个数据仓库中创建一个单元时,单元向导将包括一个可以单击单元检测和建议的操作。 预制缓存预制缓存将MOLAP等级查询运行与实时数据分析合并到一起,排除了维护在线分析处理存储的需要。 显而易见,预制缓存将数据的一个更新备份进行同步操作,并对其进行维护,而这些数据是专门为高速查询而组织的、它们将最终用户从超载的相关数据库分离了出来。 与Microsoft Office System集成在报表服务中,由报表服务器提供的报表能够在Microsoft SharePoint门户服务器和Microsoft Office System应用软件的环境中运行,Office System应用软件其中包括Microsoft Word和Microsoft Excel。 您可以使用SharePoint功能,订阅报表、建立新版本的报表,以及分发报表。 您还能够在Word或Excel软件中打开报表,观看超文本连接标示语言(HTML)版本的报表。

什么是DHT网络?

DHT全称叫分布式哈希表(Distributed Hash Table),是一种分布式存储方法。 在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。 新版BitComet允许同行连接DHT网络和Tracker,也就是说在完全不连上[Tracker服务器的情况下,也可以很好的下载,因为它可以在DHT网络中寻找下载同一文件的其他用户。 BitComet的DHT网络协议和Bittorrent今年5月测试版的协议完全兼容,也就是说可以连入一个同DHT网络分享数据。 另外,这里使用的DHT算法叫Kademlia(在eMule中也有使用,常把它叫做KAD,具体实现协议有所不同)。 如何使用DHT网络?在BitComet中,无须作任何设置即可自动连接并使用DHT网络,完全不需要用户干预。 BitComet使用和TCP端口号相同的UDP端口进行DHT网络连接。 如果要完全禁用DHT网络,可以在选项-高级-网络连接中禁用DHT网络。 对于种子制作者,可以参考:种子文件制作内网能使用DHT网络吗?可以使用。 当然,如果有可能打开路由器上所需端口的UDP转发将更加有助于整个DHT网络的健壮性。 BitComet具体是怎样连入DHT网络的呢?一般用户是完全不需要理会这个具体过程的。 这里可以简单的介绍一下:连入DHT网络的用户叫做节点(node),节点之间互相有路由记录,因此只要和任何一个已经在DHT网络中的节点连接上,客户端就可以寻找到更多的节点,从而连入网络。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐