NoSQL相关问题

2019-12-25  本文已影响0人  如逆水行舟不进则退

一 NoSQL基础

1.什么是NoSQL?

NoSQL即non SQL、non relational或not only SQL。
NoSQL的特点是设计简约、易横向扩展和高可用性。

2.关系型数据库的优势和不足?

关系型数据库的优势:
1)保持数据的一致性(事务处理)
2)由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)
3)可以进行Join等复杂查询

关系型数据库的不足:
1)不擅长处理大量数据的写入处理
2)不擅长为有数据更新的表做索引或表结构(schema)变更
3)不擅长字段不固定时应用
4)不擅长对简单查询需要快速返回结果的处理

3.为什么要使用NoSQL数据库?

查询速度快
扩展性强
存储数据的格式更丰富

4.NoSQL的优势和不足?

优势:
查询速度快
扩展性强
存储数据的格式更丰富

不足:
维护的工具和资料有限
不支持SQL
不支持事务

5.什么是I/O的五分钟法则?

如果一个数据的访问周期在5分钟以内则存放在内存中,否则应该存放在硬盘中

6.什么是分布式数据系统的CAP定理?

CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),最多只能同时三个特性中的两个,三者不可兼得

二 Memcache相关

1.什么是Memcache?

Memcached是一个高性能、分布式的内存对象缓存系统,通过在内存里维护一个巨大的哈希表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度

2.Memcache有哪些特点?


缺乏安全认证(setSaslAuthData)
重启后数据丢失
有效期
适合大量低CPU的机器搭建集群
个体独立,由客户端实现分布式算法

3.Memcache有哪些启动参数?

memcached -m 64 -vv

-d 守护进程
-p 指定端口号(默认11211)
-m 指定最大使用内存大小(默认64MB)
-t 线程数(默认4)
-l 连接的IP地址, 默认是本机
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认48
-vv 详细信息(还打印客户端命令/响应)
-I 重写每个数据页尺寸。调整数据项最大尺寸。
-R 通过限制某个连接可以连续提交的命令数,以避免其他连接待时间过久。某连接提交的命令数一旦达到该阈值,服务器将暂时拒绝其后续的请求,而优先处理其他连接的请求。该限制默认是20。即每个连接可以连续提交的命令数。

-B 绑定协议,ascii, binary, auto (default)

4.Memcache如何存储session?

session进行设置就可以了
PHP配置文件配置:
memcache,
session.save_handler = memcache
并设置路径session.save_path = "tcp://192.168.1.101:11211"

5.什么是一致性哈希算法?

在分布式系统中应用非常广泛。一致性哈希是一种哈希算法,简单地说在移除或者添加一个服务器时,此算法能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系,尽可能满足单调性的要求

6.如何提高Memcache缓存命中率?

避免单个大内存实例,可以启动多个内存小一些的实例,将数据分散到多个Memcached服务器
根据业务需求设置合理的内存空间
根据业务需求设置合理的块增长因子
根据业务需求给存储项设置合理的过期时间
分析LRU频率,避免存在大量存储项全都过期的page页。如果存在,可以将其移动(move)到更常用的slab

三 Redis相关

1.什么是Redis?

Redis 是一款依据BSD开源协议发行的高性能Key-Value存储系统。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

2.Redis有哪些特点?

单线程
数据结构服务器(易于处理集合运算)
快(每秒可处理高达10万次SET操作)
拥有很多原子操作方法,容易保证数据的一致性
兼具临时性和永久性
无中心的分布式集群

3.Redis有哪些数据类型?

STRING 可以是字符串、整数或者浮点数
LIST 一个链表 ,链表上的每个节点都包含了一个字符串
SET 包含字符串的无序集合(unordered collection) , 并且被包含的每个字符串都是独一无二、各不相同的
HASH 包含键值对的无序散列表
ZSET 字符串成 员(member) 与浮点数分值 (score) 之间的有序映 射,元素的排列顺序由分值的大小决定

4.Redis如何存储session?

PHP配置文件配置:
Redis,
session.save_handler = Redis
并设置路径session.save_path = "tcp://192.168.1.101:11211"

5.Redis的持久化规则是?

目前Redis持久化的方式有两种: RDB (快照恢复) 和 AOF(只追加文件)

6.如何用Redis实现一个优先级队列?

使用列表数据类型

rpush + blpop 或 lpush + brpop
rpush : 往列表右侧推入数据
blpop : 客户端阻塞直到队列有值输出

7.如何配制Redis主从复制?

配置文件配置,如:https://www.cnblogs.com/tiki/p/10714171.html

8.如何用Redis实现访问频率控制,如每IP每分钟请求不能超过20次?

使用list数据类型,key为IP地址,value为count次数,有效期设置为60s

四 MongoDB相关

1.什么是MongoDB?

MongoDB是一个介于关系数据库和非关系数据库之间的文档型数据库,在非关系数据库当中功能最丰富,也最像关系数据库。他支持的数据结构非常松散,类似json的bson格式,因此可以存储比较复杂的数据类型。
MongoDB支持的查询语言类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据字段建立索引。

2.为什么要使用MongoDB?

模式自由
通过数据分片实现高伸缩性
处理地理信息
高可用性,内置故障转移
高性能低延迟实时数据
局部索引,TTL索引,固定集合
内置分布式文件系统 GridFS
不适合高度事物性的系统,如银行系统等。
不适合需要复杂SQL处理的查询

3.MongoDB的启动参数有哪些?

参考相关博客:https://www.cnblogs.com/wyt007/p/8627805.html

4.如何配制MongoDB的主从复制?

参考相关博客:https://www.jianshu.com/p/b900763b076d

5.如何配制MongoDB副本集?

参考相关博客:https://www.jianshu.com/p/e7b001ac7f75

6.MongoDB的应用场景有哪些?

MongoDB 的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS 系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。根据官方网站的描述,Mongo 适用于以下场景。
● 网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
● 缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo 搭建的持久化缓存层可以避免下层的数据源过载。
● 大尺寸、低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
● 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对MapReduce 引擎的内置支持。
● 用于对象及JSON 数据的存储:Mongo 的BSON 数据格式非常适合文档化格式的存储及查询。
MongoDB 的使用也会有一些限制,例如,它不适合于以下几个地方。
● 高度事务性的系统:例如,银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
● 传统的商业智能应用:针对特定问题的BI 数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
● 需要SQL 的问题。

上一篇下一篇

猜你喜欢

热点阅读