数据库系列(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 ,…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...