当前位置: 首页 > news >正文

几个常用的nosql数据库的操作方式

dynamoDB

partition key:分区键
定义:分区键是用于分布数据存储的主键,每个项(Item)在表中都必须有一个唯一的分区键值。
特点:

  • 唯一性:每个分区键值在表中必须是唯一的,这是因为分区键决定了数据在物理存储中的位置。
  • 数据分布:选择一个良好的分区键可以确保数据在 DynamoDB 表中均匀分布。
    下面比较一些常见分区键架构的预置吞吐量效率:
    [图片]

sort key:排序键
定义:排序键是用于组织和查询表中数据的一部分主键,每个项目在表中都可以有一个分区键和一个可选的排序键。
特点:

  • 组合主键:在 DynamoDB 中,分区键和排序键一起形成组合主键。组合主键唯一标识表中的每个项目,并且排序键允许我们对项目进行排序和分组。
  • 唯一性:组合主键必须具有唯一性。
  • 查询速度快:在查询时可以通过二分查找快速定位到数据。

一般以时间作为排序键
索引
GSI (Global Secondary Index):全局二级索引

  • 可以是简单主键(分区键)或复合主键(分区键和排序键)
  • 可以在建表后更改
  • 可以跨分区查询整个表
    ps:分区只作用于物理分区,而对于索引没有意义,所以对于索引来说,GSI的partition key可以为任意字段,只要能够满足要求即可。
    LSI(Local Secondary Indexes):本地二级索引
  • 主键必须是复合主键(分区键和排序键)
  • 只能在建表时更改
  • 只能查询表中的单个分区

查询方式:

GetItem – 从表中检索单个项目。这是读取单个项目的最高效方式,因为它将提供对项目物理位置的直接访问。(DynamoDB 还提供
BatchGetItem 操作,允许在单个操作中执行最多 100 次 GetItem 调用。) Query –
检索具有特定分区键的所有项目。在这些项目中,您可以将条件应用于排序键并仅检索一部分数据。 Scan –
检索指定表中的所有项目。(不应对大型表使用此操作,因为这可能会占用大量系统资源。)

选择:

  • 查询GSI全局索引上的单个item,使用query
  • 查询同一个分区键的多个item,使用query
  • 查询不同分区键和排序键组合的多个项目,使用BatchGetItem
  • 仅在分区键上查找单个项目,使用GetItem

go第三方库:https://github.com/guregu/dynamo
Query:

  • RunWithContext()
  • AllWithContext()
  • CountWithContext()

GetItem:

  • OneWithContext()

mongodb

  1. 定义:
    索引是一个数据结构,它包含了表中某个或多个字段的值以及指向这些值对应的实际数据位置的引用。它类似于书籍的目录,允许数据库系统快速查找特定数据而无需扫描整个数据集合。

  2. 用途:

  • 提高查询性能
  • 加速排序
  • 唯一性约束
  1. 工作原理:
    索引通常是B树或B树的变种。当创建索引时,MongoDB会在指定的字段上构建索引数据结构,以存储值和对应的数据位置引用。在查询时,MongoDB可以使用索引来快速定位并检索数据。

  2. 关键概念:

  • 单字段索引:基于单个字段创建的索引。
  • 复合索引:基于多个字段创建的索引,可以包含多个字段的组合。
  • 唯一索引:确保索引字段的值在集合中是唯一的。
  • 文本索引:用于全文搜索的特殊索引。
  • 过期索引(ttl):定期检查该字段的时间戳

redis

数据类型

Redis 几种数据类型及应用场景 - 掘金
String 普通存储 适合存单value eg:粉丝数
hash 特别适合存储 value是map 适合存struct eg:用户信息对象
List 双向链表与消息队列 eg:粉丝列表
set 无序排重列表 eg:所有粉丝求共同关注
zset 提供score进行自动排序 eg:按时间取最新数据

幂等性

幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。
保证函数不被重复执行
应用场景:多次重复点击购买商品
下面代码保证了只有第一次会设置键的值

func main() {...// 检查幂等性的 Lua 脚本script := `if redis.call('exists', KEYS[1]) == 0 thenredis.call('set', KEYS[1], ARGV[1])return 1elsereturn 0end`// 执行 Lua 脚本result, err := client.Eval(ctx, script, []string{key}, value).Result()if err != nil {fmt.Println("Error:", err)return}
}

elastic

go-elastic的写入、读取、查询方法

写入:BodyString(),BodyJson()
读取:cookie:searchAfter(LastSortMap)
fetchSource(true):默认true,查询结果将包括源文档的内容
fetchSource(false):仅可以访问文档的ID和排序信息

bool查询:允许组合多个查询条件,包括 must、should、must_not 等
must:必须包含
should:任意一个包含

query = query.Must(elastic.NewBoolQuery().Should(elastic.NewBoolQuery().Must(elastic.NewMatchQuery("xxx", 1), elastic.NewMatchQuery("uid", uid)),elastic.NewBoolQuery().MustNot(elastic.NewMatchQuery("xxx", 1)),
).MinimumShouldMatch("1"))

elastic的查询语法

GET hot_recommend/_search
{"query":{"match": {"creator" : "2W0qxSLm95WkjPyerQ6h4rMCeAB","ugcType": 1}},"sort": [{"updateTime": {"order": "desc"}}]}

相关文章:

几个常用的nosql数据库的操作方式

dynamoDB 键 partition key:分区键 定义:分区键是用于分布数据存储的主键,每个项(Item)在表中都必须有一个唯一的分区键值。 特点: 唯一性:每个分区键值在表中必须是唯一的,这是因为…...

如何使用 nvm-windows 这个工具来管理你电脑上的Node.js版本

nvm-windows 是一个用于管理在 Windows 上安装的多个 Node.js 版本的工具。以下是安装和使用 nvm-windows 的步骤: 第1步:下载 nvm-windows 访问 nvm-windows 的 GitHub发布页面.下载最新版本的 nvm-setup.zip 文件。 第2步:安装 nvm-wind…...

公司电脑禁用U盘的方法

公司电脑禁用U盘的方法 安企神U盘管理系统下载使用 在这个复杂的数据时代,保护公司数据的安全性至关重要。其中,防止未经授权的数据泄露是其中的一个关键环节。U盘作为一种常用的数据传输工具,也成为了潜在的安全风险。因此,公司…...

Elasticsearch 7.X版本常用语法语句

文章目录 监控相关 API查看健康状况查看所有节点查看所有节点详细信息查看主节点查看所有索引查看所有分片 索引管理创建索引查看索引查看索引字段类型修改索引字段删除索引别名给索引添加别名查询某个索引下的别名给索引更换别名给索引解绑别名一个别名绑定多个索引查询index_…...

Python分享之数学与随机数 (math包,random包)

我们在Python运算中看到Python最基本的数学运算功能。此外,math包补充了更多的函数。当然,如果想要更加高级的数学功能,可以考虑选择标准库之外的numpy和scipy项目,它们不但支持数组和矩阵运算,还有丰富的数学和物理方…...

Linux 基本语句_8_C语言_文件控制

为了解决多个进程同时操作一个文件,产生一些情况,通常对文件进行上锁,已解决对共享文件的竞争 对打开文件进行各种操作: int fcentl(int fd, int cmd, .../*arg*/如果cmd与锁操作有关,那么fcentl函数的第三个参数就要…...

博通BCM575系列 RDMA 网卡驱动 bnxt_re 分析(一)

简介 整个BCM系列驱动分成以太网部分(bnxt_en.ko)和RDMA部分(bnxt_re.ko), 两个模块之间通过内核的auxiliary_bus进行管理.我们主要分析下bnxt_re驱动. 代码结构 这个驱动的核心是 qplib_fp.c, 这个文件主要包含了驱动的数据路径, 包括Post Send, Post Recv, Poll CQ流程的实…...

ExcelPatternTool 开箱即用的Excel工具包现已发布!

文章目录 ExcelPatternTool功能特点:快速开始使用说明常规类型高级类型Importable注解Exportable注解IImportOption导入选项IExportOption导出选项单元格样式StyleMapping样式映射使用数据库作为数据源 示例Sample1:不同类型字段导出Sample2:…...

Navicat for MySQL 视图创建使用方法

创建视图步骤: 点击新建;选择视图;点击视图创建工具;可以在左侧拖拽表到工作区;选择表字段进行连线...

计算机视觉的相机选型

#你一般什么时候会用到GPT?# 目前市面上的工业相机大多是基于CCD(ChargeCoupled Device)或CMOS(Complementary Metal Oxide Semiconductor)芯片的相机。一般CCD制造工艺更加复杂,也会更贵一点! 1、CCD工…...

实体店做商城小程序如何

互联网电商深入各个行业,传统线下店商家无论产品销售还是服务业,仅靠以往的经营模式,很难拓展到客户,老客流失严重,同时渠道单一,无法实现外地客户购物及线上客户赋能等。 入驻第三方平台有优势但也有不足…...

sql-50练习题0-5

sql练习题0-5题 前言数据库表结构介绍学生表课程表成绩表教师表 0-1 查询"01"课程比"02"课程成绩高的学生的信息及课程分数0-2查询"01"课程比"02"课程成绩小的学生的信息及课程分数0-3查询平均成绩大于等于60分的同学的学生编号和学生…...

Flutter框架实现登录注册功能,不连接数据库

要在Flutter框架中实现登录和注册功能,而不连接数据库,可以使用本地存储来存储用户信息。以下是一个简单的示例,演示如何使用本地存储来实现登录和注册功能。 首先,我们需要添加 shared_preferences 插件到 pubspec.yaml 文件中&…...

持续集成部署-k8s-部署利器-Helm

这里写目录标题 1. Helm 是什么?2. 快速安装 Helm2.1 前置条件2.2 Helm 版本与 K8s 版本对应关系2.3 离线安装 Helm3. Helm 常用命令1. Helm 是什么? Helm 是一个用于 Kubernetes 应用程序部署和管理的开源工具。它可以帮助简化 Kubernetes 应用程序的打包、发布、配置和升级…...

替换所有的问号

这篇也是凑数的 哈哈.... 稍后会整合到算法通关第三关白银挑战 . 描述 : 给你一个仅包含小写英文字母和 ? 字符的字符串 s,请你将所有的 ? 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。 注意 : 不能 修改非 ? 字符 . 题目 : …...

NCCL后端

"NCCL" 代表 "NVIDIA Collective Communications Library","NVIDIA 集体通信库",它是一种由 NVIDIA 开发的用于高性能计算的通信库。NCCL 专门设计用于加速 GPU 群集之间的通信,以便在并行计算和深度学习等领域…...

【API篇】十、生成Flink水位线

文章目录 1、水位线的生成原则2、有序流内置水位线3、乱序流内置水位线4、自定义周期性水位线生成器5、自定义断点式水位线生成器6、从数据源中发送水位线 1、水位线的生成原则 水位线出现,即代表这个时间之前的数据已经全部到齐,之后不会再出现之前的数…...

【Javascript】弹出框

目录 警告框 确认框 提示框 警告框 alert(你好); 确认框 var isConfirm confirm(请确认) console.log( isConfirm); 提示框...

NSS [鹤城杯 2021]EasyP

NSS [鹤城杯 2021]EasyP 直接给了源码 <?php include utils.php;if (isset($_POST[guess])) {$guess (string) $_POST[guess];if ($guess $secret) {$message Congratulations! The flag is: . $flag;} else {$message Wrong. Try Again;} }if (preg_match(/utils\.p…...

mysql用户及权限管理(InsCode AI 创作助手)

MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;用于存储和管理大量数据。对于那些需要使用MySQL的管理员和开发人员来说&#xff0c;用户权限管理是确保数据库安全性的至关重要的一环。在本篇技术博客中&#xff0c;我们将深入探讨MySQL的用户权限管理&#xff0c…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...