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

news2025/4/22 16:11:40

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 then
            redis.call('set', KEYS[1], ARGV[1])
            return 1
        else
            return 0
        end
        `
        // 执行 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"
      }
    }
  ]

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

檢測項目簡體字

某些項目可能要求代碼中不允許使用簡體字 安裝stcheck檢查 yarn add stcheck --dev在項目根目錄創建 st.config.json 文件 {"patterns": ["./**/*.(ts|js|tsx|jsx|vue|html)","!**/node_modules/**","!.git/**"],"gitignore&q…

可用于嵌入各种功能的STSPIN820、STSPIN830、STSPIN240、STSPIN233电机驱动器 功率 MOSFET

STSPIN电机驱动器是一系列IC,面向采用各种额定功率、电机类型和各种系统分区的应用。STSPIN电机驱动器可用于嵌入各种功能,以最高精度驱动电机。这些功能包括可减轻主机微控制器负担的高级运动轮廓生成器,以及全面的保护和诊断特性。 STSPIN…

2023.10.26-SQL测试题

employee表: department表: job表: location表: 题目及答案: -- (1).查询工资大于一万的员工的姓名(first_name与last_name用“.”进行连接)和工资-- select CONCAT(first_name,.,last_name) as 姓名 ,salary -…

第12期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练 Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…

【SpringCloudNetflix】一图理解Spring Cloud Netflix解决了那些微服务问题?

什么是微服务理解: SpringCloudNetflix解决的问题理解: SpringCloudNetflix核心点: 注册中心:Eureka负载均衡:Ribbon、Feign服务熔断:Hystrix服务降级:Hystrix服务监控:Hystrix Da…

Java 脚本实现mongo中某一个库中的表数据,导出到另外一个mongo数据库中

以下是在代码中使用的 MongoDB Java 驱动的 Maven 依赖: <dependency><groupId>org.mongodb</groupId><artifactId>mongodb-driver-sync</artifactId>

哪一个更好?Spring boot还是Node.js

前言 本篇文章有些与众不同&#xff0c;由于我自己手头有些关于这个主题的个人经验&#xff0c;受其启发写出此文。虽然SpringBoot和Node.js服务于很不一样的场景&#xff0c;但是这两个框架共性惊人。其实每种语言都有不计其数的框架&#xff0c;但仅仅一部分是真正卓越的。如…

OpenCV 画极线

from pylab import * import cv2from backend._gs_ import stereo_cameradef compute_epipole(F):""" 从基础矩阵 F 中计算右极点(可以使用 F.T 获得左极点)"""# 返回 F 的零空间(Fx0)U,S,V np.linalg.svd(F)e V[-1]return e/e[2]def plot_epi…

安装好cuda后解决torch.cuda.device_count() == 0

更新显卡驱动可以安装高版本的cuda 可以通过打开cmd输入nvidia-smi来查看 所以说不高于12.3的版本都可以安装 cuda版本匹配pytorch版本 打开网址&#xff1a;https://pytorch.org/ 验证完后&#xff0c;就可以吭哧吭哧的去下载安装了 搞完后还是发型代码跑出来GPU 0 不要…

工频电磁波对电子管的干扰

电磁干扰&#xff08;EMI&#xff09;是玩电子管绕不开的话题&#xff0c;特别是一些电磁环境恶劣的位置&#xff0c;对电子管的干扰是不可忽视的。 前段时间完成1AE4电子管混合放大耳放之后&#xff0c;发现有持续的嗡声&#xff0c;在四周安静的时候能够清晰的听到噪音&…

数字化时代,企业如何实现精细化管理来提高自身驱动力

作为“世界工厂”的中国&#xff0c;制造业一直是优势产业。制造业是现代国民经济和综合国力的重要支柱&#xff0c;其制造业的生产总值一般占一个国家国内生产总值的20%&#xff5e;55%。2022年&#xff0c;中国制造业增加值占 GDP 比重达到 27.69%&#xff0c;规模达到 4.35万…

jenkins、ant、selenium、testng搭建自动化测试框架

如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入&#xff0c;然后写一些测试脚本&#xff0c;这就是你所说的自动化测试&#xff0c;其实这个还不能算是真正的自动化测试&#xff0c;你见过每次需要运行的时候还需要打开eclipse然后去选择运行文件吗&#xff…

Qt布局 day11

Qt布局 day11 布局基本流程 布局管理器&#xff0c;可以管理widget&#xff0c;让他帮忙管理 1.创建好我们想要布局的widgets2.我们创建QBoxLayout对象将其小部件添加到布局中3.我们调用QWidget::setLayout()将QBoxLayout对象安装到小部件上4.布局中国的小部件将重新设置父类…

02 功能模块与技术选型

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;以实战为线索&#xff0c;逐步深入SpringSecurity相关知识相关知识&#xff0c;打造完整的SpringSecurity学习步骤&#xff0c;提升工程化编码能力和思维能力&#xff0c;写出高质量代码。希望大家都能够从中有所收获&#…

PMP考试都是什么题型?

这里要讲一些关于新考纲的知识点&#xff0c;这些内容都会在考试中出现。为了快速作答&#xff0c;我们要抓住主要的点&#xff0c;优先回答自信的题目。 1、不需要全都答对180道题。 按照二八法则&#xff0c;只要能答对80%的题目&#xff0c;容错率大约是20%&#xff08;约…

亚马逊卖家必备:自养号测评如何帮助新店铺脱颖而出?

亚马逊是全球最大的电商平台之一&#xff0c;成为亚马逊新店铺的卖家是许多商家的梦想。然而&#xff0c;在一个庞大的市场中脱颖而出并吸引客户并不容易。所以&#xff0c;如何在亚马逊上成功推广新店铺呢?让我们来探讨一下&#xff0c;有哪些技巧可以帮助您实现这个目标。 …

UE5 C++自定义Http节点获得Header数据

一、新建C文件 选择All Classes&#xff0c;选择父类BlueprintFunctionLibrary&#xff0c;命名为SendHttpRequest。 添加Http支持 代理回调的参数使用DECLARE_DYNAMIC_DELEGATE_TwoParam定义&#xff0c;第一参数是代理类型&#xff0c;后面是参数1类型&#xff0c;参数1&…

2-Java进阶知识总结-2-递归-异常-流-File

文章目录 Java SE进阶知识总结-2Objects、Math、System、BigDecimalObjectsMathSystemBigDecimal 包装类基本数据类型对应的包装类自动拆箱和自动装箱包装类常见问题 时间类JDK8&#xff08;-&#xff09;JDK8&#xff08;&#xff09;日历类&#xff08;获取当前时间&#xff…

7年阿里测试经验之谈 —— 用UI自动化测试实现元素定位!

随着IT行业的发展&#xff0c;产品愈渐复杂&#xff0c;web端业务及流程更加繁琐&#xff0c;目前UI测试仅是针对单一页面&#xff0c;操作量大。为了满足多页面功能及流程的需求及节省工时&#xff0c;设计了这款UI 自动化测试程序。旨在提供接口&#xff0c;集成到蜗牛自动化…

BUUCTF 文件中的秘密 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 小明经常喜欢在文件中藏一些秘密。时间久了便忘记了&#xff0c;你能帮小明找到该文件中的秘密吗&#xff1f; 密文&#xff1a; 下载附件&#xff0c;解压得到JPEG图片。 解题思路&#xff1a; 1、根据题目提示…