分布式数据库

📅 2026/7/2 7:54:43
分布式数据库
问答题NoSQL数据库分类与特点分类相关产品应用场景数据模型优点缺点列族数据库HBase分布式数据存储与管理采用列式存储将同一列数据存储在一起可扩展性强查找速度快复杂性低功能局限不支持事务的强一致性文档数据库MongoDBWeb 应用存储面向文档或类似半结构化的数据key,value其中 value 表示 JSON 结构的文档数据结构灵活可以根据 value 来构建索引缺乏统一的查询语法键值数据库Redis缓存内容如会话、配置文件、参数等频繁读 / 写、拥有简单数据模型的应用key,value通过散列表来实现扩展性好灵活性好大量操作时性能高数据无结构化通常只被当作字符串或者二进制数据只能通过键来查询值图数据库Neo4j社交网络、推荐系统专注于构建关系图谱图结构支持复杂的图形算法复杂性高只能支持一定的数据规模关系型数据库关系型数据库是基于关系模型、以二维表存储数据通过 SQL 操作、支持事务与数据完整性约束的数据库系统表间依靠主键外键建立关联。遵循 ACID 事务主流产品MySQL、Oracle、SQL Server、PostgreSQL、SQLite。关系型数据库的优缺点优点采用二维表结构逻辑清晰易于理解支持标准SQL查询、操作简单通用完整性约束完善主键、外键、唯一、非空等数据准确性高事务满足ACID强一致性适合金融、交易等严谨业务支持多表关联复杂查询数据关联能力强。缺点Schema固定无法灵活适配多变的半结构化、非结构化数据水平扩展困难海量高并发场景扩容成本高海量数据读写性能较差不适合超大规模大数据存储不擅长存储图片、视频、日志等非结构化数据。分布式的数据管理有哪些优点会产生什么问题一、优点高扩展性可横向增加节点轻松承载海量数据与高并发请求。高可用性数据多副本存储单个节点故障不导致整体服务瘫痪。高性能数据分散存储读写请求分摊到多节点提升处理速度。低成本使用普通廉价服务器集群替代高端单机数据库。容错性强副本机制保障数据不会因硬件损坏丢失。二、带来的问题数据一致性难题多节点数据同步延迟难以保证实时强一致出现数据不一致。网络开销大节点间通信、数据同步占用大量网络资源易出现网络分区故障。事务实现复杂跨节点分布式事务难以保证ACID实现难度高。运维难度提升节点数量多监控、故障排查、数据迁移管理更复杂。数据分片与均衡问题需合理分片容易出现节点数据冷热不均。Hbase1.进入hbase环境cd /opt/hadoop/sbin/初始化namenodehdfs namenode -format启动hdfs./start-all.sh启动hbasecd /opt/hbase/bin/ ./start-hbase.sh连接hbase./hbase shell2.对表的增删改查增创建数据库表user定义两个列族create user,info1,info2查看数据库表list查看表结构信息describe user删要屏蔽该表才能对表进行删除第一步disable 表名第二步drop 表名disable user drop user改要屏蔽该表才能对表进行修改第一步disable 表名第二步alter表名disable user alter user判断表是否存在exists 表名3.对数据的增删改查增put 表名,行键,列族:列,值put user,1234,info1:Name,zhangsan查scan表名查看表的所有记录scan userget表名行键 查看行键下的所有记录get user,1234get 表名,行键,列族来查看某个行键列族的记录get user,1234,info1get 表名,行键,列族:列来查看行键列族的某个列记录get user,1234,info1:Name删数据delete 表名,行键,列族:列来删除某个记录delete user,1234,info1:Nameget查询是否删除成功get user,1234,info1:Namedeleteall ’表名,行键来删除整行记录deletealluser,1234truncate表名来清空表所有的记录truncate user更新数据put 表名,行键,列族:列,值(put重写一遍就是更新)put user,1234,info1:Name,zhangsan查看是否更新成功scan user查询行数count user4.对命名空间的增删改查创建create_namespace ns1查看list_namespace改alter_namespacensq为school_db设置属性description 学校数据库alter_namespace school_db, {METHOD set, description 学校数据库}删drop_namespaceMongoDB1.进入MongoDB shell1在指定目录下创建 mongodb 文件夹、其子文件夹 data、log 以及文件 mongodb.logcd /home/ubuntu mkdir -p mongodb/data mkdir -p mongodb/log touch mongodb/log/mongodb.log2执行mongod命令启动mongod服务mongod --dbpath /home/ubuntu/mongodb/data --logpath /home/ubuntu/mongodb/log/mongodb.log --logappend --fork(3)进入mongodb shellmongosh2.数据库与集合基础命令切换/创建数据库不存在自动创建use test查看当前数据库db展示所有数据库show dbs查看当前库下所有集合show collections3.增删改查增插入单条insertOne()db.user.insertOne({ name: 张三, age: 20, gender: 男, hobby: [篮球, 游戏] })插入多条insertMany()db.user.insertMany([ { name: 李四, age: 22, gender: 女 }, { name: 王五, age: 19, gender: 男 } ])查db.user.find()比较运算符运算符含义$gt大于$gte大于等于$lt小于$lte小于等于$ne不等于$in匹配数组内任意值$nin不匹配数组内任意值查询年龄大于20db.user.find({ age: { $gt: 20 } })查询年龄18~22db.user.find({ age: { $gte: 18, $lte: 22 } })改1.updateOne 更新匹配第一条db.user.updateOne( { name: 张三 }, { $set: { age: 25, height: 175 } } )2.updateMany 批量更新所有匹配文档db.user.updateMany( { gender: 男 }, { $inc: { age: 1 } } )删1.deleteOne 删除匹配第一条db.user.deleteOne({ name: 张三 })2.deleteMany 批量删除// 删除18岁以下用户 db.user.deleteMany({ age: { $lt: 18 } })案例查看所有数据库使用一个叫做stu的数据库在stu数据库下创建一个集合xg并插入数据name:’tom’查看集合xg中的全部数据查看集合xg中的数据只返回age大于20对应的数据。show dbs ​ use stu ​ db.xg.insertOne({name:tom}) ​ db.xg.find() ​ db.xg.find({age:{$gt:20}})Redis1.启动Redis服务一个终端redis-server另一个终端redis-cli2.基本命令1.使用set、hset设置键以及值set key1 value1 hset hset1 hset1 hvalue12.使用type判断键的类型type key1 type hset13.使用exists判断key是否存在exists key1 exists hset14.使用del删除键del key1 del hset1Neo4j1.开启Neo4jsudo neo4j start浏览器打开localhost:74742.基本操作create创建1.创建节点语法create (n:label {key:value})n是节点的变量名label是节点的标签key是属性的键value是属性的值create (p:person {name:孙悟空,address:花果山})2.创建多个结点create (a:person {name:猪八戒}),(b:person {name:沙僧,address:流沙河})3.创建节点并建立关系create (n1)-[r:REL_TYPE]-(n2)REL_TYPE是关系create (n:person {name:杨戬})-[r:师傅]-(m:person {name:玉鼎真人}) return type(r)match查询1.匹配节点match (n:person) return n;2.匹配关系match (:person)-[r:师傅]-(:person) return r;delete删除1.删除节点match (p:person {name:杨戬}) delete p;2.删除关系match (:person)-[r:师傅]-(:person) delete r;