0


【分布式数据库技术】相关知识概述

分布式数据库技术-基础知识概述

在这里插入图片描述

1. NoSQL数据库的类型有哪些?

NoSQL数据库的四种类型是:

  1. 键值数据库,应用于分布式数据存储与管理;
  2. 列族数据库,用于分布式数据存储与管理;
  3. 文档数据库,应用于存储索引并管理面向文档的数据或者类似的半结构化数据;
  4. 图形数据库。

键值对存储数据库,列存储数据库,文档型数据库,图形数据库

2. 怎么判断一个数据库是否是NoSQL数据库?

  • 非关系型
  • 分布式
  • 开放源码
  • 具有横向扩展能力

3. NoSQL技术诞生的最初发点是为了解决什么问题?

  1. 解决传统关系型数据库无法解决的数据存储及访问问题。
  2. 要解决大数据应用问题。
  3. 要解决互联网上应用问题。
  4. 要解决处理速度的响应和海量数据的储存问题。

4. 列族数据库存储结构?

  1. 命名空间
  2. 行键
  3. 列族

5. NoSQL数据库有哪些不同类型并举例说明?

  1. 键值数据库

相关产品:Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached

  1. 列族数据库

相关产品:BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS

3 . 文档数据库

相关产品:MongoDB、CouchDB、ThruDB、CloudKit、Perservere、Jackrabbit

  1. 图形数据库

相关产品:Neo4J、OrientDB、InfoGrid、GraphDB

6. 文档数据库存储的基本元素是哪些?

  1. 键值对
  2. 文档
  3. 集合
  4. 数据库

7. Nosql事务处理的BASE特点指的是?

基本可用、软状态、最终一致性

8. TRDB擅长解决哪些问题,NoSQL擅长解决问题?

  • TRDB擅长解决结构化数据
  • NoSQL擅长解决非结构或半结构化数据

9. CAP定理的三大特性?

一致性,可用性,分区容错性

10. MongoDB的特点是什么?

  1. 高性能
  2. 丰富的查询语言
  3. 高可用性
  4. 水平扩展能力
  5. 多个存储引擎的支持

数据文件存储格式为BSONB;
对于文档内的对象可以创建索引;
将图片、视频等文件转换成二进制的数据;

11. MongoDB由什么语言编写和实现的?

  • C++

12. MongoDB数据库的命名规则?

  • 符合UTF-8标准的字符串
  • 不能是空字符串,如""
  • 不得含有“”(空格)、.、$、/、\、\0(空字符)
  • 区分大小写,建议全部小写
  • 名称最多为64字节
  • 不得使用保留的数据库名,如admin、local、config、test

13. MongoDB成为最好NoSQL数据库的原因是什么?

  • 面向文件的
  • 高性能
  • 高可用性
  • 易扩展性
  • 丰富的查询语言

14. MongoDB运行必须需要大量RAM内存?

不需要大量内存

15. Redis的基本数据结构类型有哪些?Redis集群模式?

  • String类型、Hash类型、链表、Set集合
  • Redis的集群模式中可以实现多个节点同时提供写操作,redis集群模式采用无中心结构,每个节点都保存数据,节点之间互相连接从而知道整个集群状态。

16. MongoDB的主要特征是什么?mongodb的分片集群的组成?

MongoDB的主要特征是:MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。

一个 MongoDB 分片集群的组成:

  1. shard:每个分片是整体数据的一部分子集。每个分片都可以部署为副本集。强烈建议在生产环境下将分片部署为副本集且最少部署 2 个分片
  2. mongos:充当查询路由器,提供客户端应用程序和分片集群之间的接口。应用程序直接连接 mongos 即可,可以部署一个或多个。
  3. config servers:配置服务器存储集群的元数据和配置(包括权限认证相关)。从 MongoDB 3.4 开始,必须将配置服务器部署为副本集(CSRS,全称是 Config Servers Replica Set)。

17. MongoDB配置文件采用什么格式?

采用

YAML

格式

18. MongoDB和Redis数据库有什么区别?

  • Redis主要把数据存储在内存中,其“缓存”的性质远大于其“数据存储“的性质,其中数据的增删改查也只是像变量操作一样简单;
  • MongoDB却是一个“存储数据”的系统,增删改查可以添加很多条件,就像SQL数据库一样灵活
名称    
类型    
数据存储选项    
查询类型    
附加功能
Redis    
基于内存的非关系型数据库    
字符串、列表、集合、哈希、有序集合    
针对数据类型有专属命令,另有批量操作和不完全的事务支持    
发布与订阅、复制、持久化、脚本扩展
MongoDB    
基于硬盘的非关系型文档存储数据库    
无 schema 的 BSON 文档    
创建、读取、更新、删除、条件查询等    
复制、分片、空间索引等

19. MongoDB中查看数据库和集合的命令?

show  dbs;

20. 什么是“mongod”进程和“mongo”进程?

  1. mongod是处理MongoDB系统的主要进程。它处理数据请求,管理数据存储,和执行后台管理操作。

当我们运行mongod命令意味着正在启动MongoDB进程,并且在后台运行。

  1. 什么是"mongo" 它是一个命令行工具用于连接一个特定的mongod实例。

当我们没有带参数运行mongo命令它将使用默认的端口号和localhost连接

21. MongoDB中的基本命令?根据条件修改一条数据和多条数据的内容命令?

  • update() 方法
db.集合名称.update({query},{update},{multi:boolean})
  • query:查询条件
  • update:更新操作符
  • multi:可选,默认是false,表示只更新找到的第一条数据,值为true表示把满足条件的数据全部更新
db.stu.update({name:'hr'},{name:'mnc'})           # 全文档进行覆盖更新
db.stu.update({name:'hr'},{$set:{name:'hys'}})    # 指定键值更新操作
db.stu.update({},{$set:{gender:0}},{multi:true})  # 更新全部

multi参数必须和$set一起使用!

  • save() 方法
db.集合名称.save(document)
db.stu.save({_id:'20170101', name:'gj', gender:2})
db.stu.save({name:'gj', gender:2})
db.stu.find()
save()

方法通过传入的文档替换已有文档

:如果

save()

法也指定了

_id

,则对文档进行更新;未指定

_id

则会执行插入功能,

MongoDB

默认自动生成一个不重复的

_id

  • update() 方法仅适用于修改某条数据中的某个键值;
  • save() 方法适用于修改整条数据。

22. Redis的几个常见命令?Redis中常见字符串命令

STRING 拥有一些和其他键值存储相似的命令,比如 GET(获取值),SET(设置值),DEL(删除值)
1.$ redis-cli  
2.redis-cli 127.0.0.1:6379> set hello redis  
3.OK  
4.redis-cli 127.0.0.1:6379> get hello  
5."redis"6.redis-cli 127.0.0.1:6379> del hello  
7.(integer)18.redis-cli 127.0.0.1:6379> get hello  
Redis中的列表
LPUSH 命令可用于将元素推入列表的左侧
RPUSH 命令可将元素推入列表的右侧
LPOP 和 RPOP 就分别从列表的左侧和右侧弹出元素
LINDEX 可以获取指定位置上的元素
LRANGE 可以获取指定范围的全部元素

Redis

字符串执行自增和自减的命令列表如下:
命令用法说明

INCR
INCR key

key

存储的值加上

1
DECR
DECR key

key

存储的值减去

1
INCRBY
INCRBY key increment

key

存储的值加上

increment
DECRBY
DECRBY key decrement

key

存储的值减去

decrement
INCRBYFLOAT
INCRBYFLOAT key increment

key

存储的值加上浮点数

increment

Redis 还可以对字节串的一部分内容进行读取/写入:
命令用法说明

APPEND
APPEND key value

value

追加到

key

键存储的值的末尾

GETRANGE
GETRANGE key start end

获取

start

end

间的子串

SETRANGE
SETRANGE key offset value

start

偏移量开始,将与

value

长度一致的子串设置为

value

常用的列表命令:
命令用法说明

LPUSH
LPUSH key value [value ...]

将一个或多个

value

推入到列表的左侧

RPUSH
RPUSH key value [value ...]

将一个或多个

value

推入到列表的右侧

LLEN
LLEN key

返回列表

key

的长度

LREM
LREM key count value

根据参数

count

的值,移除列表中与参数

value

相等的元素

23. Redis订阅命令?

Redis 发布订阅命令:
序号命令及描述1PSUBSCRIBE pattern [pattern ...]
订阅一个或多个符合给定模式的频道。2PUBSUB subcommand [argument [argument ...]]
查看订阅与发布系统状态。3PUBLISH channel message
将信息发送到指定的频道。4PUNSUBSCRIBE [pattern [pattern ...]]
退订所有给定模式的频道。 5SUBSCRIBE channel [channel ...]
订阅给定的一个或多个频道的信息。6UNSUBSCRIBE [channel [channel ...]]
指退订给定的频道。

24. Redis消息发布/订阅机制的原理是什么?主要命令有哪些?

发布原理:发布消息时现根据

chanel

找到对应订阅者链表,然后遍历发送消息。

订阅原理:Redis的底层结构中,Redi服务器结构体中定义了一个pubsub_channels字典,维护了频道和订阅者的对应关系,每次客户端添加订阅时将对应的客户端信息添加到链表的末尾

主要命令:

  1. ping 沟通命令,查看状态
  2. dbsize 查看当前数据库中key的数量
  3. selectdb切换库命令
  4. flushdb 删除当前数据库的所有数据
  5. exit或者quit 退出客户端连接

25. 如何启动redis服务?

  1. 直接启动 进入redis根目录下,在bin目录中找到redis-server,执行如下命令:./redis-server &

注意:如果加上 ‘&’ ,使得redis以后台程序方式运行

  1. 通过指定的配置文件启动 同样,在redis的根目录下进行启动,只不过这次启动命令中需要指定对应的配置文件:
#首先需要找到自己指定的配置文件,然后启动服务时在后面添加即可
./redis-server /etc/redis/redis.conf

redis-server redis.conf

26. Redis 数据库对大小写敏感不?Redis选择不同的数据库使用什么命令?

  1. Redis的Key值是大小写敏感,使用字符窜做键值时注意大小写
  2. SELECT index

27. 单机环境下什么是影响数据库读写速度的最大瓶颈?

机械硬盘

28. 把数据从硬盘读写处理,改为内存处理,是属于什么类型的扩展?

  1. 纵向扩展👌
  2. 把大数据放在不同服务器的内存上进行处理 是 横向扩展

29. NoSQL主要解决了大数据环境下的什么问题?

NoSQL

主要解决了大数据环境下的数据存储处理速度问题

30. 进行大数据分析,NoSQL相对TRDB至少具有什么优势?

技术优势和成本优势

扩展简单;快速读写;成本低廉;数据模型灵活;

  1. 擅长大量数据的写入和读取
  2. 快速的查询响应,灵活的数据模型
  3. 数据结构变更或更新非常方便,不需要更改已有数据的数据结构
  4. 击碎了性能瓶颈,可以使执行速度变的更快

31. 键值数据库、文档数据库、列族数据库对值查找能力的比较?

键值数据库对值查询功能较弱、文档数据库较强、列族数据库很强

键值数据库

  • 优点:扩展性好,灵活性好,大量操作时性能高
  • 缺点:数据无结构化,通常只被当做字符串或者二进制数据,只能通过键来查询值

文档数据库

  • 优点:数据结构灵活,可以根据 value 构建索引
  • 缺点:缺乏统一查询语法

列族数据库

  • 优点:可扩展性强,查找速度快,复杂性低
  • 缺点:功能局限,不支持事务的强一致性

32. Redis安装包如何使用? 发布者和订阅者的消息订阅机制?

发布者和订阅者不是直接传输消息的,是通过代理来传输的。

  1. Redis安装包如何使用?
  • 创建redis 用户和数据目录
  • 编辑redis服务启动文件
  • 验证redis 启动
  • 使用客户端连接redis
  • 创建命令软连接
  • 编译安装后的命令
  1. 发布者和订阅者的消息订阅机制?
  • Jedis客户端回调方法是阻塞的。数据量大,逻辑处理复杂,会导致本地堆集过多的消息,异步处理避坑
  • Jedis订阅方法subscribe本身也是阻塞的,如果你是在系统启动的时候去加载订阅者,注意异步避坑,防止阻塞,系统一直停在这个位置,不能完全启动
  • 消息分发方式是广播,对于同一个channel,每个订阅者都可以收到同样的消息,如果此消息不能被重复消费,注意使用分布式锁避坑
  • 如果没有订阅者,发布者的消息会被丢弃,没有存储机制,所以在发布消息之前,确保订阅者已经完成订阅操作

33. 大型网站应用时对于海量数据的解决方案有哪些?

  1. 使用缓存;
  2. 页面静态化技术;
  3. 数据库优化;
  4. 分离数据库中活跃的数据;
  5. 批量读取和延迟修改;
  6. 读写分离;
  7. 使用NoSQL和Hadoop等技术;
  8. 分布式部署数据库;
  9. 应用服务和数据服务分离;
  10. 使用搜索引擎搜索数据库中的数据;
  11. 进行业务的拆分;

34. 论述TRDB与NoSQL的技术特点区别?

NoSQL是弥补传统关系型数据库技术的不足而产生的新的数据库技术。

  1. 数据库数据存储模式不一样,TRDB为强数据存储模式,NOSQL为弱数据存储模式(没有严格的限制)﹔
  2. 分布式技术是NOSQL的核心技术思路,而TRDB以集中部署一台物理机为最初出发点;
  3. TRDB的事务严格遵循ACID原则(ACID强事务,确保数据的可用和准确性。而NOSQL遵循Base原则;
  4. TRDB都遵循SQL操作标准,NOSQL没有统一的操作标准;
  5. TRDB基于单机的硬盘数据处理技术为主,NOSQL基于分布式的或者内存数据处理技术为主;
TRDB:(1)使用强存储模式技术。
     (2)采用SQL技术标准来定义和操作数据库
     (3)采用强事务保证可用性及安全性
     (4)主要采用单机集中式处理(CP,CentralizedProcessing)方式。

NoSQL:(1)使用弱存储模技术
      (2)没有采用SQL技术标准来定义和操作数据库
      (3)采用弱事务保证数据可用性及安全性或根本没有事务处理机制。
      (4)主要采用多机分布式处理(DP,DistributedProcessing)方式

35. 实例化一个mongo客户端,服务器地址:localhost(本地),端口号:27017

MongoClient mongoclient =newMongoClient(“localhost”,27017);

36. 实例化一个mongo数据库, 创建并获取数据库中集合,在集合中插入一条文档。

MongoClient mongoclient=newMongoClient(“localhost”,27017);MongoDataBase mongodatabase=newMongoDatabase(“mydb”);
mongoDatabase.createCollection("test");MongoCollection collection = mongoDatabase.getcollection(“test”);Document document =newDocument();
document.append(“id”,1);
collection.insertOne(document);

Python代码

from pymongo import MongoClient

# 如果是本地连接host,port参数可以省略(27017是默认端口)
client = Mongoclient("localhost",27017)# 数据库和集合能够自动创建
collection = client[mydb][test]# collection = client.db名.集合名 # 与上边用法相同

collection.insert({"name":"zz","age":19})

37. 实例化一个mongo客户端,服务器IP地址,端口号:27017,实例化一个mongo数据库db, 创建集合,获取数据库中集合tt文档中具有n和a属性值,在集合tt中获取文档中的内容,打印输出每条文档中的键 “n”对应的值。

try{/********* Begin *********///启动本地服务,端口号为27020 MongoClient mongoClient =newMongoClient("localhost",27017);//连接名为databaseName数据库  MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");//获取集合test MongoCollection<Document> collection = mongoDatabase.getCollection("test");//创建集合test1
    mongoDatabase.createCollection("test1");//获取集合test1MongoCollection<Document> collection=mongoDatabase.getCollection("test1")
        
    collection.insertMany(tt);
    collection.find({"n":{$all}});
from pymongo import MongoClient

# 如果是本地连接host,port参数可以省略(27017是默认端口)
client = Mongoclient("localhost",27017)# 数据库和集合能够自动创建
col = client[db][tt]# 获取db数据库中的tt集合# 获取具有n和a属性的文档也就是,一行行的字典数据# $exists:检查某个键是否存在,1表示存在,0表示不存在for doc in db.roles.find({'n':{'$exists':True}}):print(doc["n"])# 打印输出每条文档中的键 “n”对应的值

38. 使用 Java 代码在mongodb中完成文档的检索(查询)、更新与删除。

检索文档

使用驱动

com.mongodb.client.MongoCollection

类中的

find()

方法来获取集合中的所有文档。

此方法返回一个游标,所以你需要遍历这个游标。

//检索所有文档  /**  
 * 1. 获取迭代器FindIterable<Document>   
 * 2. 获取游标MongoCursor<Document>   
 * 3. 通过游标遍历检索出的文档集合   
 **/FindIterable<Document> findIterable = collection.find();MongoCursor<Document> mongoCursor = findIterable.iterator();while(mongoCursor.hasNext()){System.out.println(mongoCursor.next());}

更新文档

你可以使用

com.mongodb.client.MongoCollection

类中的

updateMany()

方法来更新集合中的文档:

//更新文档:将第一关例子文档中nums=90的文档修改为nums=100  
collection.updateMany(Filters.eq("nums",90),newDocument("$set",newDocument("nums",100)));

删除文档

要删除集合中的第一个文档,首先你需要使用

com.mongodb.DBCollection

类中的

findOne()

方法来获取第一个文档,然后使用

remove()

方法删除。

//删除符合条件的第一个文档  
collection.deleteOne(Filters.eq("nums",100));//删除所有符合条件的文档  
collection.deleteMany (Filters.eq("nums",100));

39. 创建集合t2将以下文档插入 db2 数据库的 t2 集合中;检索 t2 中的所有文档;更新 Xi 的信息为25岁;删除Xiao的信息。

_id        name    sex        age
1Xi        man        23
/********* Begin *********///启动本地服务,端口号为27020 MongoClient mongoClient =newMongoClient("localhost",27017);//连接名为databaseName数据库  MongoDatabase mongoDatabase = mongoClient.getDatabase("db2");//获取集合test MongoCollection<Document> collection =mongoDatabase.getCollection("t2");//插入要求中的数据到集合t2Document document1=newDocument();
    document1.append("_id","1");
    document1.append("name","Xiaoming");
    document1.append("sex","man");
    document1.append("age",23);List<Document> documents =newArrayList<Document>();    
    documents.add(document1);    
    collection.insertMany(documents);//更新 Xiaohong 的信息为23岁
    collection.updateMany(Filters.eq("name","Xiaohong"),newDocument("$set",newDocument("age",25)));//删除Xiaoliang的信息
    collection.deleteOne (Filters.eq("name","Xiaoliang"));}catch(Exception e){System.err.println( e.getClass().getName()+": "+ e.getMessage());}

40. HBase对于空(NULL)的列,占不占用存储空间?MapReduce的基本设计思想?

不占用,计算向数据靠拢

MapReduce基本设计思想:

  1. 对付大数据并行处理:分而治之。
  2. 上升到抽象模型:Map与Reduce。在此过程中,首先将输入数据划分成许多个块,并分别使用一个Map函数对每一个数据块进行 并行处理,第一步输出中间结果。然后将中间结果进行混洗和排序,再递交给Reduce进行处理。同理,Reduce也采用并行计算,最后输出最终结果。
  3. 上升到结构:自动并行化并隐藏底层细节。

41. Spark 的四大组件?Spark的主要特点?

四大组件:

  • SparkStreaming, 针对实时数据进行流式计算的组件;
  • SparkSQL, 用来操作结构化数据的组件;
  • GraphX, Spark面向图计算提供的框架与算法库; MLlib, 一个机器学习算法库。

Spark 主要特点:

  1. 速度快
  2. 易用性
  3. 通用性
  4. 兼容性

42. Spark是hadoop哪个组件的替代方案? Spark为什么比Mapreduce快?Hadoop和Spark能否部署在同一个集群?

  • Mapreduce,因为迭代计算,交互式计算,且rdd中间运算结果在内存中,延迟小,task以线程维护,任务启动快。

可以

43. Hadoop和Spark能不能同时部署?

Hadoop和Spark不是互斥的,可以一起工作。

44. Spark的几个主要概念:RDD、DAG、阶段、分区、窄依赖、宽依赖?

RDD:是ResillientDistributedDataset(弹性分 布式数据集)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型
DAG:是DirectedAcyclicGraph(有 向无环图)的简称,反映RDD之间的依赖关系
阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”。
分区:一个就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个可以分成多个分区,每个分区就是一个数据集片段。
宽依赖:宽依赖是指1个父RDD分区对应多个子RDD分区
窄依赖:窄依赖是指1个父RDD分区对应1个子RDD的分区

45. spark集群部署模式有哪几种?SparkContext的概念?Executor,Worker?Spark组成部件有哪些?

模式:本地模式,standalone集群模式,spark on yarn集群模式,spark on mesos集群模式

组成部件:executor,driver

SparkContext是上下文

46. Spark的出现是为了解决Hadoop MapReduce的不足,试列举Hadoop MapReduce的几个缺陷,并说明Spark具备哪些优点。

Hadoop MapReduce存在以下缺点:

①表达能力有限;
②磁盘IO开销大;
③延迟高

Spark主要有如下优点:

①Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比MapReduce更灵活;
②Spark提供了内存计算,中间结果直接存放内存中,带来更高的迭代运算效率;
③Spark基于DAG的任务调度执行机制,要优于MapReduce的迭代执行机制。


文字搬运,可能存在问题!


加油!

感谢!

努力!


本文转载自: https://blog.csdn.net/qq_46092061/article/details/125009097
版权归原作者 ZSYL 所有, 如有侵权,请联系我们删除。

“【分布式数据库技术】相关知识概述”的评论:

还没有评论