解析:轻松了解分布式数据库的主要特点

概述

分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都有DBMS的一份完整拷贝副本,并具有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的大型数据库。

这种组织数据库的方法克服了物理中心数据库组织的弱点。首先,降低了数据传送代价,因为大多数的对数据库的访问操作都是针对局部数据库的,而不是对其他位置的数据库访问;其次,系统的可靠性提高了很多,因为当网络出现故障时,仍然允许对局部数据库的操作,而且一个位置的故障不影响其他位置的处理工作,只有当访问出现故障位置的数据时,在某种程度上才受影响;第三,便于系统的扩充,增加一个新的局部数据库,或在某个位置扩充一台适当的小型计算机,都很容易实现。然而有些功能要付出更高的代价。例如,为了调配在几个位置上的活动,事务管理的性能比在中心数据库时花费更高,而且甚至抵消许多其他的优点。

分布式数据库系统主要特点:

· 多数处理就地完成;

· 各地的计算机由数据通信网络相联系。

· 克服了中心数据库的弱点:降低了数据传输代价;

· 提高了系统的可靠性,局部系统发生故障,其他部分还可继续工作;

· 各个数据库的位置是透明的,方便系统的扩充;

· 为了协调整个系统的事务活动,事务管理的性能花费高;

数据分片类型

(1)水平分片:按一定的条件把全局关系的所有元组划分成若干不相交的子集,每个子集为关系的一个片段。

(2)垂直分片:把一个全局关系的属性集分成若干子集,并在这些子集上作投影运算,每个投影称为垂直分片。

(3)导出分片:又称为导出水平分片,即水平分片的条件不是本关系属性的条件,而是其他关系属性的条件。

(4)混合分片:以上三种方法的混合。可以先水平分片再垂直分片,或先垂直分片再水平分片,或其他形式,但他们的结果是不相同的。

条件:

(1)完备性条件:必须把全局关系的所有数据映射到片段中,决不允许有属于全局关系的数据却不属于它的任何一个片段。

(2)可重构条件:必须保证能够由同一个全局关系的各个片段来重建该全局关系。对于水平分片可用并操作重构全局关系;对于垂直分片可用联接操作重构全局关系。

(3)不相交条件:要求一个全局关系被分割后所得的各个数据片段互不重叠(对垂直分片的主键除外)。

数据分配方式

(1)集中式:所有数据片段都安排在同一个场地上。

(2)分割式:所有数据只有一份,它被分割成若干逻辑片段,每个逻辑片段被指派在一个特定的场地上。

(4)全复制式:数据在每个场地重复存储。也就是每个场地上都有一个完整的数据副本。

(5)混合式:这是一种介乎于分割式和全复制式之间的分配方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基本的分布式爬虫案例: 1. 首先,创建一个主节点和多个从节点,通过一个共同的任务队列来分配任务。 2. 主节点从一个种子URL开始抓取网页,并将爬取到的URL添加到任务队列中。 3. 从节点从任务队列中获取任务,下载页面并解析页面中的数据,并将结果发送回主节点。 4. 主节点将从节点返回的结果存储数据库或文件中。 5. 该过程循环执行,直到任务队列中没有任务。 代码实现: 主节点: ``` import queue import threading import urllib.request def main(): # 初始化任务队列 urls = ['http://example.com'] task_queue = queue.Queue() for url in urls: task_queue.put(url) # 初始化结果队列 result_queue = queue.Queue() # 创建从节点 workers = [] for i in range(5): worker = Worker(task_queue, result_queue) worker.start() workers.append(worker) # 等待所有任务完成 for worker in workers: worker.join() # 处理结果 while not result_queue.empty(): result = result_queue.get() # 存储结果到数据库或文件 print(result) class Worker(threading.Thread): def __init__(self, task_queue, result_queue): super().__init__() self.task_queue = task_queue self.result_queue = result_queue def run(self): while True: url = self.task_queue.get() html = urllib.request.urlopen(url).read() # 解析页面并将结果添加到结果队列中 self.result_queue.put((url, html)) self.task_queue.task_done() if __name__ == '__main__': main() ``` 从节点: ``` import urllib.request class Worker(): def __init__(self, task_queue, result_queue): self.task_queue = task_queue self.result_queue = result_queue def run(self): while True: url = self.task_queue.get() html = urllib.request.urlopen(url).read() # 解析页面并将结果添加到结果队列中 self.result_queue.put((url, html)) self.task_queue.task_done() ``` 该实现利用Python的标准库模块queue和threading来实现分布式爬虫。主节点将任务推到任务队列中,在等待从节点完成任务的同时,将从节点返回的结果保存在结果队列中。这种实现方式具有可扩展性和可维护性,可以轻松地增加或移除从节点,而不会影响整个系统的稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值