【数据库中的存储桶】
存储桶是对象存储系统中的一个核心概念,起源于Amazon S3(Simple Storage Service)并被其他对象存储解决方案(如MinIO、Google Cloud Storage等)广泛采用。在传统的文件系统中,我们通常使用目录和子目录来组织文件。但在对象存储系统中,存储桶充当这样的角色,作为数据的逻辑容器。
在云计算中,Bucket是一种用于存储云数据的容器,可以用于存储图片、视频、音频等各种类型的数据。
每个“桶”由两部分组成:一个存储数据的部分(Data Fields)和一个“指针”(Bucket Pointer),用来指向下一个“桶”(Nested Bucket)。
在数据库中,“桶”通常分为两类:数据“桶”(Data Bucket)和索引“桶”(Index Bucket)。其中数据“桶”用来存储数据库中的实际数据,而索引“桶”则存储数据在数据库中的索引信息。
桶对象存储(如Amazon S3、阿里云OSS、腾讯云COS等)使用扁平化结构来存放对象,这是指在这些存储服务中,对象(如文件、图片、视频等)是直接存储在一个“桶”(Bucket)中的,并没有传统文件系统中的目录(文件夹)层级结构。
在扁平化结构中,每个对象都有一个唯一的键(Key),这个键用于在桶中唯一标识和定位对象。这个键可以包含类似路径的分隔符(如/),但这只是键的一部分,并不表示真实的目录结构。对象存储系统并不会根据键中的分隔符来创建实际的目录或文件夹。
例如,如果你有一个键为folder1/folder2/image.jpg的对象,这并不意味着在桶中有一个名为folder1的目录,该目录下又有一个名为folder2的子目录,子目录中存放着image.jpg文件。实际上,folder1/folder2/image.jpg只是该对象在桶中的唯一标识符,你可以通过这个键来访问和下载这个对象。
这种扁平化结构的设计带来了几个好处:
-
简单性:不需要维护复杂的目录结构,使得对象存储系统更加简单和高效。
-
可扩展性:由于没有目录结构的限制,可以轻松地存储和访问数十亿个对象。
-
灵活性:可以通过在键中使用分隔符来模拟目录结构,方便数据的组织和管理。
然而,也需要注意,由于扁平化结构中没有真实的目录结构,因此在对象存储系统中进行批量操作(如删除某个目录下的所有对象)可能会更加复杂,通常需要遍历桶中所有对象并匹配相应的键来实现。
简单解释
存储桶是用于组织和管理在对象存储服务中存储的数据(即对象)的逻辑单位。它相当于一个高度可配置和可扩展的“文件夹”。与传统的文件夹不同,存储桶可以拥有更多的元数据和访问控制策略。每个存储桶都有一个全局唯一的名称,并且通常用于存放一组相关的数据。
场景:图片存储和分发服务
背景
假设你正在运营一个社交媒体平台,需要存储用户上传的大量图片。这些图片包括用户头像、帖子图片和评论中的媒体内容。由于流量巨大,你需要一个高性能、可扩展和成本有效的存储解决方案。
技术选型
在这种情况下,对象存储(例如Amazon S3或MinIO)会是一个很好的选择,相对于传统的文件系统或关系数据库。对象存储优于文件系统在于其可扩展性和元数据管理,优于关系数据库在于成本和对大文件的处理能力。
存储桶的角色
你可以创建一个名为 UserMedia的存储桶来专门存储所有用户媒体文件。这个存储桶内部不会有传统意义上的文件夹结构,但你可以通过对象键(Object Key)模拟目录结构。例如,头像可以存储在 avatars/用户ID.jpg这样的键下。
配置与策略
存储桶 UserMedia可以配置多种访问控制策略,例如仅允许特定服务进行写操作,或设置CDN(内容分发网络)以加速图片加载。这些配置都可以直接在存储桶级别进行,无需为每个文件单独设置。
与其他技术的互动
-
CDN:你可能会使用内容分发网络(如Cloudflare或Akamai)与存储桶结合,以更快地向用户分发媒体。
-
数据库:用户的元数据(如图片的标题或标签)可能存储在一个关系数据库(如MySQL)中,其中会存有指向存储桶中特定对象的引用。
通过这个场景,你可以看出存储桶不仅仅是一个“文件夹”,而是一个功能丰富、高度可配置的数据存储单位,能与多种其他技术协同工作。
有的云存储服务或框架不支持事务,这就意味着下载文件或目录到本地时这个过程不是以事务的方式执行的,如果下载过程中出现错误(网络中断、存储桶中的文件被删除或修改),不会提供像传统数据库一样的回滚或恢复机制来确保数据的一致性。
回顾一下事务的概念,ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
在数据库和许多其他系统中,事务是一个作为单个逻辑单元执行的工作单位。它要么完全执行,要么完全不执行,从而确保数据的完整性和一致性。
用户可能需要自己通过重试机制、检查点或其他方式来确保数据的一致性和完整性。所以在使用不支持事务的云存储服务时,用户应确保他们的操作是可靠的,并准备号处理可能出现的错误和异常情况。使用像校验和、版本控制或其他数据完整性检查机制来验证下载的数据是否完整准确。
相关文章:
【数据库中的存储桶】
存储桶是对象存储系统中的一个核心概念,起源于Amazon S3(Simple Storage Service)并被其他对象存储解决方案(如MinIO、Google Cloud Storage等)广泛采用。在传统的文件系统中,我们通常使用目录和子目录来组…...
多选项卡的shiny
下面是一个包含多个选项卡的 Shiny 应用程序示例代码。在这个例子中,我们创建了一个包含三个选项卡的 Shiny 应用程序,每个选项卡中都有不同的内容。 library(shiny)# Define UI ui <- fluidPage(titlePanel("多选项卡 Shiny 应用"),tabse…...
Python项目Django框架发布相关
1.Nginx配置 server { listen 80; server_name 域名地址;location / { uwsgi_pass 0.0.0.0:4563;// 运行地址include uwsgi_params;} location /static{ // 静态文件路径alias /www/wwwroot/djserverproject/static;}}server { listen 443; server_name 域名地址;ssl_certific…...
kettle使用手册 安装9.0版本 建议设置为英语
0.新建转换的常用组件 0. Generate rows 定义一个字符串 name value就是字符串的值 0.1 String operations 字段转大写 去空格 1. Json input 来源于一个json文件 1.json 或mq接收到的data内容是json字符串 2. Json output 定义Jsonbloc值为 data, 左侧Fieldname是数据库…...
golang string、byte[]以及rune的基本概念,用法以及区别
在 Go 语言中,string、byte[] 和 rune 是处理文本和字符的三种不同数据类型。它们有各自的用途和特点,下面将详细介绍它们的基本概念、用法以及区别。 1. string 基本概念 字符串类型:string 是 Go 语言中的一种基本类型,用于表…...
全国211大学名单及排名
序号 名称 省份 985 211 双一流 1 北京大学 北京 是 是 是 2 清华大学 北京 是 是 是 3 复旦大学 上海 是 是 是 4 上海交通大学 上海 是 是 是 5 浙江大学 浙江 是 是 是 6 国防科技大学 湖南 是 是 是 7 中国人民大学 北京 是 …...
ASR 语音识别相关
ASR 语音识别 ASR(Automatic Speech Recognition,自动语音识别)是一种能够将语音转换为文本的技术。这种技术使得计算机能够“听懂”我们说的话,并将它们记录下来。这项技术被广泛应用于日常生活中的各种场景,比如语音…...
kotlin require和assert 区别
在 Kotlin 中,require 和 assert 是两种用于验证条件的方法,主要区别在于它们的使用场景和触发机制。 require require 用于函数参数的验证。如果条件不满足,它会抛出 IllegalArgumentException 异常。这通常用于对公共 API 的输入参数进行…...
考研:数学一/二 和英语一/二 有什么区别
考研数学一/二 区别: 考试内容: 数学一:考查内容包括高等数学、线性代数、以及概率论与数理统计,覆盖的知识面较为全面,题目难度也相对较高。数学二:考试内容包含高等数学和线性代数,不包括概率…...
地铁中的CAN通信--地铁高效安全运转原理
目前地铁采用了自动化的技术来实现控制,有ATC(列车自动控制)系统可以实现列车自动驾驶、自动跟踪、自动调度;SCADA(供电系统管理自动化)系统可以实现主变电所、牵引变电所、降压变电所设备系统的遥控、遥信、遥测;BAS(环境监控系统)和FAS(火灾报警系统)可以实现车站…...
简化数据提取:Excel-Extractor 使用指南
前言 在当今数据驱动的世界中,从复杂的 Excel 文件中提取和分析数据是许多业务和研究工作的基本需求。为了简化这一过程,Excel-Extractor 项目应运而生。本文将为你介绍 Excel-Extractor 的功能和如何在你的项目中使用它。 什么是 Excel-Extractor&…...
用户中心项目全流程
企业做项目流程 需求分析 > 设计(概要设计 、 详细设计) > 技术选型 >初始化项目 / 引入需要的技术 > 写个小demo > 写代码 (实现业务逻辑) > 测试(单元测试)> 代码提交 / 代码评审 …...
达梦数据库的系统视图v$database
达梦数据库的系统视图v$database 基础信息 OS版本: Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本: DM Database Server 64 V8 DB Version: 0x7000c 03134284132-20240115-215128-20081在达梦数据库(Dameng Database…...
Vue.js中的虚拟DOM
一.节点和状态 在我们平常对DOM操作的时候,之前在vue没有诞生之前,以命令式的方式对DOM进行操作,页面上的每一个元素都可以看做成一个节点状态。 二.剔除和渲染 框架都有自己渲染的方式,假设一个页面的状态,随着Ajax请求的放松,状态发生改变,有以下的两种方式供你选择&#…...
【设计模式之迭代器模式 -- C++】
迭代器模式 – 遍历集合,无需暴露 迭代器模式是一种设计模式,用于顺序访问集合对象的元素,而无需暴露其底层实现。迭代器模式分离了集合对象的遍历行为,使得访问元素时,可以不必了解集合对象的底层实现。 组成 迭代…...
Linux网络编程:套接字编程
1.Socket套接字编程 1.1.什么是socket套接字编程 Socket套接字编程 是一种基于网络层和传输层网络通信方式,它允许不同主机上的应用程序之间进行双向的数据通信。Socket是网络通信的基本构件,它提供了不同主机间的进程间通信端点的抽象。一个Socket就是…...
多电商账户为什么要用指纹浏览器?
随着电子商务的蓬勃发展,越来越多的商家选择开设多店来扩大经营规模。然而多店运营也带来了一系列的挑战,其中之一就是账号安全。 1. 了解反检测浏览器和代理服务器 在我们开始讨论如何有效地使用反检测浏览器之前,我们首先需要了解这两个工…...
用Rancher2.8.5部署K8s集群
参考:通过Rancher 2.7.5部署企业生产级K8s集群 新K8s集群的环境信息 Rancher1台,K8s集群6台(1台rancher,3台master,4台node)。 Name|lmage Name|IP Address|Flavor|Comment project-root-dev-rancher|Ro…...
未来已来,如何打造智慧养殖场?
近年来,国家出台了一系列扶持政策,以促进养殖行业高质量发展,推动行业转型升级。在国家政策和市场需求的双重驱动下,养殖行业正迎来前所未有的发展机遇。智慧养殖以其高效、智能和可持续的特点,正逐步取代传统养殖方式…...
代码随想录算法训练营第七天|454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
打卡Day7 1.454.四数相加II2.383. 赎金信3.15. 三数之和4.18. 四数之和 1.454.四数相加II 题目链接:四数相加II 文档讲解: 代码随想录 class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int res 0;Map…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...
对象回调初步研究
_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...
Qwen系列之Qwen3解读:最强开源模型的细节拆解
文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...
