数据库系列(1)常见的四种非关系型数据库(NoSQL)
非关系型数据库(NoSQL)
非关系型数据库适用于需要灵活数据模型和高可扩展性的场景。常见的非关系型数据库包括:
- MongoDB:文档数据库,以JSON-like格式存储数据,适合快速开发和迭代。
- Cassandra:分布式数据库,适合处理大规模数据和高可用性需求。
- Redis:内存数据库,通常用于缓存和实时数据处理。
- Neo4j:图数据库,适合处理复杂的网络关系数据。
特点:
- 灵活的数据模型:不需要固定模式,可以轻松存储不同类型的数据。
- 高可扩展性:能够水平扩展,适应大规模数据需求。
- 多种数据模型:支持文档、键值、列族、图等多种数据存储方式。
1.MongoDB
MongoDB 是一个开源的文档数据库,属于非关系型数据库(NoSQL),因其灵活性、可扩展性和高性能而广受欢迎。以下是对 MongoDB 的详细介绍:
1. 数据模型
MongoDB 使用 BSON(Binary JSON)格式来存储数据,数据以文档的形式存在,每个文档都可以包含不同的字段和数据类型。这种结构化但灵活的模型允许开发者轻松地存储复杂的数据。
文档示例:
{"_id": "1","name": "Alice","age": 30,"address": {"city": "New York","zip": "10001"},"hobbies": ["reading", "traveling"]
}
2. 特性
- 灵活的数据模式:可以根据需要随时添加、删除字段,无需定义模式。
- 高性能:针对大量数据的读写操作进行了优化,支持高并发请求。
- 水平扩展:支持分片(sharding),可以通过增加更多节点来扩展存储和处理能力。
- 强大的查询语言:支持丰富的查询操作,包括聚合、排序、索引等。
- 复制集:支持数据的高可用性和故障恢复,通过复制集(Replica Set)实现数据的冗余。
3. 使用场景
- 内容管理系统:灵活的数据模型适合快速迭代的内容管理需求。
- 实时数据分析:高性能使其适合实时数据处理和分析。
- 物联网应用:能够处理大量传感器数据和非结构化数据。
- 移动应用:支持快速的数据操作,适合需要快速反应的移动端应用。
4. 基本操作
-
插入数据:
db.collection.insertOne({ "name": "Alice", "age": 30 });
查询数据:
db.collection.find({ "age": { "$gt": 25 } });
更新数据:
db.collection.updateOne({ "name": "Alice" }, { "$set": { "age": 31 } });
删除数据:
db.collection.deleteOne({ "name": "Alice" });
5. 优缺点
优点:
- 高性能和可扩展性。
- 灵活的文档结构,适合快速开发。
- 强大的查询功能和聚合框架。
缺点:
- 数据一致性和事务支持相对较弱,虽然 MongoDB 4.0 及以上版本引入了多文档事务。
- 对于复杂的关系数据模型,不如关系型数据库直观。
6. 总结
MongoDB 以其灵活性、扩展性和强大的性能适用于多种现代应用场景。它特别适合处理大量非结构化或半结构化数据,尤其是在快速迭代和开发中表现出色。
- Redis
Redis 是一个开源的内存数据结构存储系统,通常用作数据库、缓存和消息代理。它以高性能和丰富的数据结构而闻名,广泛用于需要快速数据访问的场景。以下是对 Redis 的详细介绍:
1. 基本特性
- 内存存储:Redis 将数据存储在内存中,提供极快的读写速度。
- 持久化选项:虽然主要是内存数据库,Redis 支持将数据持久化到磁盘(RDB 和 AOF 格式),以便在重启后恢复数据。
- 丰富的数据结构:支持字符串、哈希、列表、集合、有序集合、位图、超日志等多种数据类型。
2. 数据结构
- 字符串(String):简单的键值对,支持存储文本、数字、二进制数据等。
- 哈希(Hash):键值对的集合,适合存储对象,便于字段的更新。
- 列表(List):按插入顺序排列的字符串集合,支持快速的头部和尾部操作。
- 集合(Set):无序的字符串集合,支持交集、并集和差集等操作。
- 有序集合(Sorted Set):有序的字符串集合,每个元素都有一个分数,用于排序。
- 位图(Bitmap):高效存储和操作位(0或1)的数据。
- 超日志(HyperLogLog):用于统计唯一元素的近似计数。
3. 性能
Redis 的高性能源于以下几个方面:
- 内存存储:通过将数据完全存储在内存中,读写速度极快。
- 单线程模型:使用单线程处理请求,避免了上下文切换的开销,利用事件驱动的异步模型实现高并发。
- 支持多种持久化机制:根据需求选择不同的持久化方式,既能保证性能,也能确保数据安全。
4. 使用场景
- 缓存:由于快速的读取能力,Redis 常被用作缓存层,以提高应用的响应速度。
- 实时分析:适用于需要实时更新和快速查询的数据分析场景。
- 会话存储:常用于存储用户会话信息,提供快速访问。
- 排行榜:利用有序集合功能,可以轻松实现游戏或社交应用中的排行榜。
- 消息队列:支持列表和发布/订阅模式,可以用作轻量级的消息队列系统。
5. 基本操作
-
插入数据:
SET key "value"
查询数据:
GET key
删除数据:
DEL key
操作数据:
SADD myset "value1"
SREM myset "value1"
6. 优缺点
优点:
- 极高的性能,适合高并发场景。
- 支持丰富的数据结构,灵活性强。
- 简单易用,提供丰富的命令和客户端库。
缺点:
- 内存限制:数据完全存储在内存中,对于超大数据集可能会造成内存不足。
- 数据持久性较弱:虽然支持持久化,但相较于传统数据库,数据丢失风险更高。
7. 总结
Redis 是一个功能强大且灵活的内存数据库,适用于多种应用场景,尤其是在需要快速读写和高性能的情况下。它的丰富数据结构和简单易用的特性,使其成为现代应用开发中的重要工具。
- Noe4j
Neo4j 是一个开源的图数据库管理系统,以图结构为基础来存储和查询数据。它专门为处理复杂的关系数据而设计,非常适合社交网络、推荐系统和其他需要高效关系查询的应用场景。以下是对 Neo4j 的详细介绍:
1. 基本概念
- 图模型:Neo4j 使用节点(Node)、关系(Relationship)和属性(Property)来表示数据。节点代表实体,关系连接节点并可以具有方向和属性。
- 节点:可以是任何实体,如用户、产品等。
- 关系:表示节点之间的连接,具有类型和方向,例如“朋友”、“购买”等。
- 属性:附加在节点或关系上的键值对,用于存储额外信息。
2. 数据模型示例
例如,假设我们有用户和他们之间的朋友关系,数据可以表示如下:
- 节点:
- 用户节点:
(Alice {age: 30}) - 用户节点:
(Bob {age: 25})
- 用户节点:
- 关系:
- 朋友关系:
(Alice)-[:FRIENDS_WITH]->(Bob)
- 朋友关系:
3. 查询语言
Neo4j 使用一种名为 Cypher 的查询语言,专门设计用于图数据的查询。Cypher 语法直观且易于理解。
基本查询示例:
-
查找节点:
MATCH (n:User {name: 'Alice'}) RETURN n
查找关系:
MATCH (a:User)-[:FRIENDS_WITH]->(b:User) RETURN a, b
添加节点和关系:
CREATE (a:User {name: 'Alice', age: 30})-[:FRIENDS_WITH]->(b:User {name: 'Bob', age: 25})
4. 特性
- 图查询优化:Neo4j 针对图查询进行了优化,能够快速遍历节点和关系。
- ACID 支持:提供事务支持,确保数据的一致性和完整性。
- 灵活的数据模型:可以轻松添加新节点和关系,适应不断变化的业务需求。
- 丰富的生态系统:支持多种编程语言的驱动程序,以及与其他数据处理工具(如 Apache Spark 和 Elasticsearch)的集成。
5. 使用场景
- 社交网络:管理用户之间的关系,如好友推荐、社交图谱分析等。
- 推荐系统:基于用户行为和偏好的图结构数据,为用户提供个性化推荐。
- 欺诈检测:通过分析交易和用户关系,识别潜在的欺诈行为。
- 知识图谱:存储和查询复杂的知识关系和实体。
6. 优缺点
优点:
- 适合处理复杂关系和大规模图数据,查询性能优越。
- 直观的图模型,易于理解和使用。
- 强大的社区和生态系统,支持多种工具和集成。
缺点:
- 相较于关系型数据库,学习曲线可能较陡峭,尤其是对于不熟悉图论的开发者。
- 对于简单的关系和数据模型,可能过于复杂。
7. 总结
Neo4j 是一个功能强大且灵活的图数据库,特别适用于处理复杂的关系数据和高效的关系查询。其直观的图数据模型和强大的查询语言使其成为现代应用开发中的重要工具。
相关文章:
数据库系列(1)常见的四种非关系型数据库(NoSQL)
非关系型数据库(NoSQL) 非关系型数据库适用于需要灵活数据模型和高可扩展性的场景。常见的非关系型数据库包括: MongoDB:文档数据库,以JSON-like格式存储数据,适合快速开发和迭代。Cassandra:…...
大规模预训练语言模型的参数高效微调
人工智能咨询培训老师叶梓 转载标明出处 大规模预训练语言模型(PLMs)在特定下游任务上的微调和存储成本极高,这限制了它们在实际应用中的可行性。为了解决这一问题,来自清华大学和北京人工智能研究院的研究团队探索了一种优化模型…...
一场大模型面试,三个小时,被撞飞了
去华为面试大模型,一点半去五点半回,已经毫无力气。 1️⃣一轮面试—1小时 因为一面都是各个业务的主管,所以专业性很强,面试官经验很丰富,建议大家还是需要十分熟悉所学内容,我勉强通过一面。 2️⃣二轮…...
Python每次for循环向list中添加多个元素
Python中,我每次for loop要产生几个结果。要将这些结果加到一个list中。怎么最高效? 答: list extend 方法 在Python中,如果你想在循环中将多个元素添加到列表中,最直接和最高效的方式是使用列表的 append() 方法。每次循环时&a…...
Java爬虫抓取数据的艺术
在信息时代,数据的重要性不言而喻。对于Java开发者来说,掌握如何使用Java进行数据抓取是一项宝贵的技能。通过编写爬虫程序,我们可以从互联网的海量信息中提取有价值的数据,用于市场分析、客户洞察、内容监控等多种场景。本文将介…...
Unity场景内画车道线(根据五阶曲线系数)
之前做过使用Dreamteck Splines插件构建车道线之前需求是给定车道线的点位,根据点位来进行构建。 由于AI识别出来的点位不线性,画出来的车道线经常是歪七扭八,所以使用五阶曲线系数进行构建。 使用在线图形计算器进行测试构建,公式…...
IPLOOK百万级用户容量核心网惊艳亮相北京PT展
2024年9月25日,以“推动数实深度融合,共筑新质生产力”为主题,本届中国国际信息通信展(PT展)在北京国家会议中心正式拉开帷幕。 广州爱浦路网络技术有限公司(简称:IPLOOK)ÿ…...
家庭网络的ip安全性高吗
家庭网络的IP安全性是一个重要的话题,涉及到如何保护家庭设备和用户的隐私。家庭网络的安全性既有其优势,也存在一些潜在的风险。以下是关于家庭网络IP安全性的几个关键点: 1. 家庭网络的优势 私有IP地址的使用 家庭网络中的设备通常使用私…...
LLM阅读推荐
(按名称排序) 【徹底解説】これからのエンジニアの必携スキル、プロンプトエンジニアリングの手引「Prompt Engineering Guide」を読んでまとめてみた(opens in a new tab)3 Principles for prompt engineering with GPT-3(opens in a new tab)A beginn…...
计算机网络笔记001
讲义 1.计算机网络的定义 定义: 一批独立自治的计算机系统的互连集合体 说明: 独立自治的计算机系统, 互连的手段是各种各样的, 依据协议进行 工作 2.计算机网络和通信网络 通信网络: 重点研究通…...
如何用IDEA连接HBase
编写java代码,远程连接HBase进行相关的操作 一、先导依赖 代码如下: 二、连接成功...
【JS代码规范】如何优化if-else代码规范
1. 快速结束,减少没必要的else 案例一:2种互斥的条件判断 function test(data) {let result ;if (data < 0) {result 负数;} else {result 非负数;}return result; }优化一: function test(data) {if (data < 0) {return 负数;} …...
MovieLife 电影生活
MovieLife 电影生活 今天看到一个很有意思的项目:https://www.lampysecurity.com/post/the-infinite-audio-book “我有一个看似愚蠢的想法。通常,这类想法只是一闪而过,很少会付诸实践。但这次有所不同。假如你的生活是一部电影,…...
网工内推 | 中级云运维工程师,双休,五险一金
01 博达人才 🔷招聘岗位:中级云运维工程师 🔷岗位职责 1、受理数据中心、云租户投诉、受理故障工单,并在时限内完成。 2、协助客户开通云产品,解答客户使用过程中的疑问。 3、处理云产品故障,协助进行故…...
Thingsboard规则链:Related Entity Data节点详解
引言 在复杂的物联网(IoT)生态系统中,数据的集成与分析是实现高效管理和智能决策的基础。Thingsboard作为一个强大的开源物联网平台,其规则链(Rule Chains)机制允许用户构建自定义的数据处理流程。其中&am…...
C++结尾
面试题 1.什么是虚函数?什么是纯虚函数 在定义函数时前面加virtual。虚函数是为了,父子类中只有一个该函数。如果在子类重写虚函数,那么用的就是子类重写的虚函数;如果子类没有重写虚函数,那么调用的是父类继承的虚函…...
Flutter鸿蒙化环境配置(windows)
Flutter鸿蒙化环境配置(windows) 参考资料Window配置Flutter的鸿蒙化环境下载配置环境变量HarmonyOS的环境变量配置配置Flutter的环境变量Flutter doctor -v 检测的问题flutter_flutter仓库地址的警告问题Fliutter doctor –v 报错[!] Android Studio (v…...
Vue入门之生命周期
文章目录 一、Vue 生命周期概述二、生命周期的四个阶段1. 创建阶段2. 挂载阶段3. 更新阶段4. 销毁阶段 三、代码案例四、总结 在 Vue 开发中,理解生命周期是非常重要的。Vue 的生命周期可以帮助我们在不同的阶段执行特定的逻辑,从而更好地控制组件的行为…...
UNI-SOP应用场景(1)- 纯前端预开发
在平时新项目开发中,前端小伙伴是否有这样的经历,hi,后端小伙伴们,系统啥时候能登录,啥时候能联调了,这是时候往往得到的回答就是,再等等,我们正在搭建系统呢,似曾相识的…...
力扣9.23
1014. 最佳观光组合 给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的 距离 为 j - i。 一对景点(i < j)组成的观光组合的得分为 values[i] values[j] i - j ,…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
