干货 | 携程Dynamo风格存储的落地实践

Dynamo介绍 一、介绍 1、简介 Amazon DynamoDB 是由 AWS 提供的一种完全托管的 NoSQL 数据库服务,适用于高性能、可扩展的应用程序。它设计用于处理大规模的数据存储和高速数据访问,广泛应用于需要低延迟、高吞吐量的场景,如移动应用、电商、游戏后端、IoT(物联网)和社交媒体等。此外还可以使用 AWS 管理控制台来监控资源使用情况和各种性能指标。 2、特点 高可扩展性: DynamoDB 能够自动扩展以处理大规模的数据和高并发的请求。它通过分区技术在多个服务器上自动分配数据,确保随着数据增 阅读详情

作者简介

根泰,携程高级后端开发工程师,关注数据存储和数据库领域。

遐龄,携程研发总监,关注大数据存储、性能调优。

Dynamo风格数据库来源于亚马逊的Dynamo: Amazon’s Highly Available Key-value Store 论文,在该论文中论述了一种无主复制的数据库,受此启发,携程酒店开发了多存储介质预定库Hare和高可用性高性能的动态信息存储服务InfoKeeper。本文将介绍Dynamo风格的无主复制数据库,及其在携程酒店的实践。

一、Dynamo风格数据库

在分布式系统中,为了提高数据的可用性和性能,通常会将同样的数据复制多份,分担读写请求和主备切换,在复制形式上,主要有单主复制、多主复制、无主复制。

1.1 单主复制

6317687ac6ff967edcfa172852010f84.png

在单主复制中,只有一个主节点可以写入,数据从主节点复制到从节点,从节点可以承担读请求,单主复制的结构简单,易于实现,没有数据冲突。但是写入依赖主节点,写入性能由主节点的性能决定,主从节点之间存在复制延迟(在从节点上读取到的数据不一定是最新的数据),在主节点发生故障进行主从切换的时候存在数据丢失或者写入的不可用。

1.2 多主复制

576d5be9ed7c8b07637d9f34273aef90.png

在多主复制中,有多个主节点承担写入的请求,相比于单主复制,数据的写入请求被多个主节点分担,但主从节点之间的复制延迟问题依然存在。除此之外,两个主节点对同一份数据的并发写入需要冲突解决机制决定以哪次写入为准。

1.3 无主复制

Dynamo风格的数据库就是无主复制,写入的请求不会经过特定的主节点复制到从节点,所有的节点都可以承担读取和写入,容忍写入时的不一致,在读取时解决不一致。

假设一个数据库中有三个节点,存储的键值对X=1。在下面的示意图中,三个节点都收到了同一个写入的请求,C节点写入失败。

016661cd6474c8a513c9f85e82da2c13.png

此时,三个节点内键值X对应的value是不一样的,收到读请求后自然会返回不同的值。

873f191f7f18ca48b28daa0f57147bc2.png

从上帝视角看,此时此刻,键值X对应的value应该是100,但对于一个运行的系统,需要一个机制解决下面两个问题,这个机制称为仲裁。

  • 对于读取到的不同的值,哪个值为正确的值?

  • 读取多少个节点才能保证读取到正确的值?显然,如果只从C节点上读取,那不管问题1的答案是什么,都得不到正确的值。

1.4 严格仲裁

使用时间戳或者版本号判定哪个值为正确的值:时间戳最大的或者版本号最大的,代表数据是最新的,最新的数据就是正确的数据。

R+W>N,N:总的节点个数,W: 判断写入成功所需的节点个数,R:读取时至少需要读取成功的节点个数,W+R>N时总会读到最新的数据。如下图所示,蓝色的节点表示写入成功的节点,即W=3,当R=3时,读取成功的节点和写入成功的节点一定会有交集。W越小,写入的可用性更高,写性能越好,R越小,读的可用性更高,读性能越好。

0454ed869d3f996dd99263105c212d47.png

假设单个节点的可用性P=99.9%,以此来计算无主复制时的读和写的可用性,不同的R、W的可用性情况如下表所示,以N=3举例,R=1时读的可用性等于6ecf696abd11c51b13b27eca09f96246.jpeg。

节点的数量

R、W

读可用性

写可用性

2

R=2 W=1

99.8%

99.9999%

R=1 W=2

99.9999%

99.8%

3

R=2 W=2

99.999%

99.999%

R=3 W=1

99.7%

99.9999999%

R=1 W=3

99.9999999%

99.7%

根据表中所示,在N=3,R=W=2时,读和写的可用性都比单个节点的读写可用性高,这也是Dynamo风格数据库使用的推荐配置。

1.5  宽松仲裁

在严格仲裁时,如果达不到严格仲裁的R+W>N时会返回调用端错误码,假设N=5,W=R=3,读取的时候读了5个节点,但是三个节点读失败了,只有两个节点读成功了,此时如果以两个节点的结果比较版本号或者时间戳,得到的数据有可能是错误的,也有可能是正确的。

如果我们的系统能够忍受返回不新鲜的数据的可能性,那么使用宽松仲裁是提高系统可用性的一种办法。我们来定义宽松仲裁:在系统达不到严格仲裁的条件时,利用仅有的条件返回调用端结果,注意,必须是先尝试满足严格仲裁,达不到严格仲裁时使用仅有的条件返回调用端结果,比如,N=5,R=W=3,在读取数据时先读取三个节点,两个节点读取失败,为了满足严格仲裁,再读取剩余的两个节点,但是一个成功,一个失败,此时一共有两个节点读取成功,使用两个节点的数据宽松仲裁,得出结果,而不是一开始就只读两个节点,这两种方式读取到错误数据的概率差别很大。

使用宽松仲裁时得到正确数据的概率如下表所示,假设单个节点的可用性P=99.9%,N=1,R=W=1时,读和写的可用性是dd67ddaeb0ca6bedfdfe55d14412773d.jpeg,N=3,R=1,W=1时读到错误数据的概率a5593f795b271e20742f9d79652e9365.jpeg。

节点的数量

R、W

读可用性

写可用性

读到正确数据的概率

2

R=1 W=1

99.9999%

99.9999%

99.9998%

3

R=1 W=2

99.9999999%

99.999%

99.9999997%

R=2 W=1

99.999%

99.9999999%

99.9999997%

R=1 W=1

99.9999999%

99.9999999%

99.9999994%

无主复制的数据库在写入的时候容忍了部分节点的不一致,但是我们希望每个节点上的数据尽可能的完整,这就需要节点版本补齐。

1.6 节点间的版本补齐

1)写修复,节点写失败在写入的时候已经是被感知到的,可以通过消息队列等方式异步的在写入失败之后补偿修复。

286672c933e1e749951c3dc6b97f5876.png

2)读修复,在读取数据的时候,已经知道了节点间的数据不一致,此时可以根据仲裁得出的数据来修复版本滞后的节点上的数据。

115d4a66b372566b86fdc5344a4d3d59.png

3)巡检,主动的扫描介质间的数据,根据仲裁的结果修复数据。

d196e6eb5afaf307fc4002e98fa54d9f.png

二、由无主复制向多介质存储扩展

前面介绍无主复制数据库的时候一直在使用“节点”这个概念,这里对节点做一个定义:运行同一套代码的、拥有完全相同功能的进程,比如Redis的master和slave节点。

在携程酒店的预定订单和价态信息存储中,选择合适的存储介质一直是一个核心的技术问题,我们希望数据不仅在介质内有互备(Redis的master和slave),还能有介质间的互备(比如Redis和Trocks),因为同一个存储介质总是拥有相似的运作机制,同时出问题的概率更高。

在多介质数据存储中,我们对前面理论部分用存储介质代替“节点”后的语义就是:数据同时写到多个存储介质中,容忍部分存储介质的写入失败,在读出数据时,仲裁决定整个系统中数据最终的值,整个系统能够容忍单一存储介质级别不可用的情况,系统的稳定性从容忍单个节点故障提升到了存储介质级别。

三、Hare:多存储介质的预定库

Hare的名称来源于成语“狡兔三窟”,数据存储在多个介质中,以保证数据的安全。Hare承担携程酒店预定库的功能,主要用于存储在用户下单的各个环节(创单、支付、提交)中产生的订单相关数据。在订单完成提交后从Hare同步到订单库,进入订单处理环节。Hare的架构图如下图所示,应用层代码管理底层的Redis、Trocks、Hbase的写入和读取,以及仲裁返回给调用端的数据。介质间版本补齐使用写修复。

f5fce91750581529247854efdf70515f.png

Hare内部采用宽松仲裁,N=3,W=1,R=1,使用版本号判断最新版本。需要特别指出的是,W=1并非任何一个介质写入成功就算成功,Hare内部“期望”的写入成功个数为2,但是当所有介质写入完成后,写入成功的介质个数依然没有达到2,就会优先考虑可用性,写入成功的个数等于1也算写入成功。

当W=1时,严格仲裁的R应该等于3,Hare内部会读所有的3个介质并比较版本号,返回版本号最大的数据。但如果读完所有数据,依然只有一个介质读成功,还是会以成功的这个介质的数据返回给调用方。所以宽松仲裁的含义是,在使用严格仲裁但达不到严格仲裁的条件时,优先保证可用性。写入和读取时的流程图如下所示。

86a4a73ad14548919ac543c92e96c70b.png

四、InfoKeeper:高可用高性能的动态信息存储

InfoKeeper是对Hare架构在酒店价态量存储场景下的改进,Hare作为下单场景用,对性能要求较低,但对数据的可靠性要求更高。但在酒店的价态量存储中,对性能要求更高,数据可靠性要求较下单场景低,所以InfoKeeper中存储介质的个数较Hare更少,选择了Redis和Trocks两个存储介质,仲裁的N=2,W=1,R=1。

我们将InfoKeeper中参与仲裁的介质称为主介质(图中绿色),将只会写入但是不参与仲裁的介质称为从介质(图中淡蓝色),从介质的写入是否成功都不会影响对客户端的响应。介质间的版本补齐使用写修复。在酒店价态量存储中架构图如下。

7718421e4b5bc171f4ea4a59cdae27ef.png

InfoKeeper写入的流程图如下。

d85eb8e24be489ab2f09903e9bb4e532.png

InfoKeeper现在支持的存储介质有redis、trocks、mysql、es、hbase、oceanbase、Tikv、qmq、kafka、soa。qmq通常作为推送增量的方式,kafka用于推送离线数据,soa用于通过soa接口调用的方式更新服务端的缓存。因为接口较消息队列延时更低,所以soa面向对缓存新鲜程度要求很高的使用方,比如酒店查询服务,在InfoKeeper中将消息队列和soa接口当作一种存储介质看待,只是这种存储介质不能提供读功能。

InfoKeeper中存储的数据目前在百亿级别,InfoKeeper完成了这些数据的存储、承担了40万QPS的读能力,以及数据从存储方到各个使用方的高效流转。得益于强大的读能力(强大的读写能力主要是因为选择了性能更好的KV型存储介质为主介质,可以根据数据读取方对性能和数据新鲜度的要求,选择对应的存储介质和仲裁的方式),一些散落在各个使用方的缓存废弃,改为直接从InfoKeeper读。根据统计,InfoKeeper节省了20%的硬件成本,数据的流转效率较以往使用关系型数据库存储,使用方从关系型数据库拉取的方式大大提高,还消除了关系型数据库的单点性能限制。

51b48771edc434dc5658778e49cad71e.png

建立缓存的一种新模式

在InfoKeeper前面的架构图中,如果将主介质改为关系型数据库,从介质改为redis,就实现了为DB建缓存的目的,只是把从DB拉数据改为了主动往redis写数据,减轻了DB的压力。如果需要建多份缓存,只需要多挂几个从介质就可以实现。目前酒店的房型通用缓存就是使用这种方式。

五、设计目标的验证

怎么确认多介质存储系统符合设计预期,能够容忍存储介质级别的故障?Hare上线6个季度,InfoKeeper上线4个季度以来,我们在每个季度都会对Hare和InfoKeeper做单个介质注入故障的演练,在演练期间应用和上下游正常,在注入故障恢复之后,写修复最终追赶成功,可以确认系统符合设计预期。

六、展望

现在InfoKeeper和Hare还在应用代码层面,没有形成通用的组件,新的业务的加入需要在现有代码的基础上增加业务逻辑,开发者对底层的多介质存储的代码是有感的,也可能需要修改多介质存储层的代码以更好的贴合新的业务。

我们计划对Infokeeper和Hare的代码进行合并,形成一个通用的组件,让新的使用方能对多介质存储层无感,做到开箱即用,降低多介质存储的使用门槛,使得使用方能更专注于业务代码。

【推荐阅读】

60e2aa5ac6c2079a83bad9221d1caef9.jpeg

 “携程技术”公众号

  分享,交流,成长

Dynamo数据库论文小结 论文链接: http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf Dynamo数据库提供了一个key-value的高可用性的数据库。它更是直接启发了Cassandra数据库的存储模式。总结来说,这个数据库的目的是为了高可用和可拓展,为了这两个目标,它采用了最终一致性的模型。这篇总结很简略地描述了Dynamo 阅读详情

相关推荐

OpenMMLab实战指南:从环境搭建到首个检测模型运行

本文是一份详细的OpenMMLab实战指南,重点介绍了如何从零开始搭建环境并运行首个目标检测模型。内容涵盖Miniconda环境配置、PyTorch与CUDA版本匹配、使用MIM工具安装MMCV和MMDetection的核心步骤,并通过RTMDet-tiny模型演示了完整的推理流程,帮助开发者高效入门这一计算机视觉开源算法体系。

weixin_28678151的博客 156

AI-Dynamo项目:大模型推理性能调优与解耦架构实践指南

在大规模语言模型(LLM)推理部署中,你是否面临以下痛点? - **GPU利用率低下**:传统单体推理流水线中,Prefill(预填充)和Decode(解码)阶段的计算特性差异导致GPU资源浪费 - **KV缓存重复计算**:请求路由不当导致KV缓存频繁刷新,增加计算开销和延迟 - **内存瓶颈限制**:大规模KV缓存存储需求超出GPU内存容量 - **动态负载适应差**:静态GPU分配无法应对...

gitblog_00874的博客 597

【unity小技巧】新输入系统InputSystem游戏运行中改键重新绑定控制按键(最全最完美解决方案)

在游戏开发中,控制输入是至关重要的一环。Unity的新输入系统(Input System)为开发者提供了强大的工具来管理和处理用户输入,不仅支持各种平台上的多种输入设备,还能轻松处理复杂的输入操作和映射。本文将深入探讨如何使用Unity的新输入系统重新绑定控制按键,为开发者提供一套全面且完善的解决方案。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7358

Dynamo-Amazon高可用键值存储 笔记

Dynamo提供了应用可配置的能力,应用可以通过设置(N、R、W)来满足自己的需求。同时,Dynamo将数据一致性和冲突调和的逻辑开放给开发者,由应用来处理冲突。 Dynamo采用了完整成员模型,在该模型中,每个节点都知道其他节点存储了哪些范围的数据。在实现中,每个节点主动将完整路由表通过gossip传输给系统内其他节点。

Coding for freedom 1657

【数字IC/FPGA】低功耗设计

低功耗设计方法功耗的类型低功耗设计方法静态低功耗技术多阈值工艺方法电源门控方法体偏置动态低功耗技术多电压域(Multi-Voltage Domain)预计算门控时钟门级优化技术毛刺的消除逻辑级优化物理级优化控制输入向量低功耗Soc系统的动态管理动态电压及频率调节技术低功耗操作系统存储器功耗控制总结 功耗的类型 CMOS电路中的功耗由两部分构成,第一部分为负载电容充放电时引起的功耗,称为动态功耗,另一部分为漏电流引起的功耗,称为静态功耗。其中动态功耗包括翻转功耗和短路功耗。翻转功耗是数字电路中信号翻转时电容充

qq_40268672的博客 3072

ChatGPT启蒙之旅:弟弟妹妹的关键概念入门

本文主要介绍了ChatGPT启蒙之旅:弟弟妹妹的关键概念探险,希望能对初学大模型的同学们有所帮助。 文章目录 1. 背景 2. GPT是个什么样的人? 3. GPT使用的核心思维 4. GPT使用的场景介绍

herosunly的博客 16万+

DynamoDB概述

DynamoDB是一个NoSQL数据库,支持键值和文档数据模型。开发人员可以使用DynamoDB来构建现代的无服务器应用程序,这些应用程序从小规模开始,然后扩展到全局。这些应用程序可以支持pb级的数据和每秒数千万个读/写请求。DynamoDB设计用于运行高性能、互联网规模的应用程序,这些应用程序可能会使传统的关系数据库负担过重。

qq_46475612的博客 2214

YOLO11涨点优化:半监督学习 | 结合Unbiased Teacher框架,利用海量无标签数据实现自训练暴力涨点

本文提出了一种基于Unbiased Teacher v2的半监督学习方法,用于解决YOLO11目标检测模型在标注数据不足时的性能瓶颈问题。通过分析纯监督YOLO11在小样本场景下的局限性,揭示了朴素自训练方法的三大陷阱:确认偏差、类别不均衡和噪声累积。文章详细解析了Unbiased Teacher框架的核心设计理念,包括教师-学生模型互监督机制、类别平衡损失和Burn-In预热策略,并重点介绍了v2版本针对无锚框检测器的优化。最后提出将Unbiased Teacher与YOLO11相结合的融合架构设计方案,

2601_95807009的博客 207

深入理解 DynamoDB

DynamoDB 是由 Amazon Web Services (AWS) 推出的 NoSQL 数据库,最早源于亚马逊内部的需求,特别是为了满足高度可扩展、低延迟的存储需求。2007 年,亚马逊发表了关于其分布式数据库 Dynamo 的论文,为 DynamoDB 提供了设计的理论基础。最终,AWS 在 2012 年正式推出 DynamoDB,成为一个全托管、无服务器的数据库服务,支持大规模的应用场景,并能够自动分配和扩展资源。

hello.reader 2843

【VTKExamples::PolyData】第十六期 GradientFilter

本文分享VTK样例GradientFilter,并解析接口vtkGradientFilter & vtkAssignAttribute,希望对各位小伙伴有所帮助!

qq_40041064的博客 319

【RT-DETR实战】117、华为昇腾CANN部署探索:从模型转换到推理踩坑实录

本文总结了RT-DETR模型在昇腾310B芯片上部署的关键挑战与解决方案。主要遇到四大问题:1)模型转换时需注意ONNX导出设置,建议先固定尺寸验证;2)内存布局差异导致推理异常,需精确匹配NHWC/NCHW格式;3)流水线并发优化中内存复用和异步处理是关键;4)调试阶段需利用专用工具逐层比对。作者提出六条实用建议,包括小尺寸验证、预处理对齐、内存池设计等,强调部署是持续适配过程,需建立完整的测试体系应对工具链迭代。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 191

DynamoDB 深入解析

概述Amazon DynamoDB 是一种高性能的、完全托管的 NoSQL 数据库服务,旨在提供快速而可预测的性能,并能够实现无限的可扩展性。它是一种键值和文档数据库,提供单位级的访问控制和细粒度的成本控制。与传统的关系型数据库不同,DynamoDB 采用了分布式存储和无共享架构,能够轻松应对大规模的数据访问和数据增长。实...

测试0901-1 1127

【LLM技术全景】规模定律与模型演进:为什么模型越大越强?

规模定律性能 ∝ 参数量^N性能 ∝ 数据量^M性能 ∝ 计算量^L其中 N, M, L 是小于1的正数(通常0.05~0.15)关键观察损失与规模的关系呈幂律(不是线性,也不是对数)三个要素(参数、数据、计算)需要协调增长只增加其中一个要素,收益会边际递减规模定律(Scaling Law):1. 模型性能与参数量、数据量、计算量呈幂律关系2. Kaplan定律(2020):参数量是主要因素3. Chinchilla定律(2022):数据和参数同等重要,最优比例1:20。

专注:太空算力、AI infra、异构调度、大模型成本工程 495

分布式数据库DynamoDB

DynamoDB DynamoDB是分布式数据库,设计成用来解决数据库管理、性能、可扩展性和可靠性等核心问题。开发人员可以创建一个数据库表,该表可以存储和检索任何数量的数据。 DynamoDB改进了Memcached的一致性hash算法 采用了虚拟节点的机制改进了一致性hash算法,有Q个虚拟节点,S个物理节点,那么为每一个物理节点分配Q/S个虚拟节点,其中Q>>S,虚拟节点的好处是能...

fanc的博客 6083

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

终极NixOS系统清洁方案:Impermanence让你的系统重获「新生」

Impermanence是一款专为NixOS设计的系统状态管理工具,它能帮助你精确控制哪些文件和目录在系统重启后保留,其余数据则自动清理,从根本上保持系统的纯净与高效。对于追求系统整洁、希望避免长期使用产生的配置混乱和性能下降的用户来说,这是一个不可或缺的工具。 ## 为什么需要Impermanence?三大核心优势 ### 保持系统默认清洁 传统系统使用时间越长,冗余文件、临时缓存和配置残留

gitblog_00048的博客 490

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

介绍Amazon分布式存储引擎Dynamo

<br />Dynamo 是个什么东东呢?他是 Amazon 公司的一个分布式存储引擎。 那么这个什么引擎又是什么?<br /> 首先,假设一个场景,你的网站要存储用户登陆的IP。这个问题怎么解决呢?传统的方法是用数据库。数据库提供了方便的操作接口,复杂的查询能力以及事物的保证。<br /> 好,现在假设大家都很喜欢你的网站,访问的人越来越多。一个数据库已经处理不过来了。于是你安装了3台数据库主机,把用户分成了三类(男人,女人,IT人;总是有某种方法把用户分成数目大致差不多的几个部分吧)。<br />

很不错的 blog 9494

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Amazon Dynamo系统架构

http://www.linuxeye.com/architecture/1679.html 一、系统概述 1、Amazon平台概述        Amazon平台是一个由数百服务组成的面向服务的架构,其秉承高度去中心化、松散耦合、完全分布式的原则,具体架构参考下图1。 图1 Amazon系统架构 在这种环境中,尤其需要一个始终可用的存储系统,由此,Dynamo诞生了。

romandion的专栏 7138

Amazon DynamoDB简介

一、DynamoDB的数据是存储在SSD(固态硬盘,固态硬盘),这样可以在预测的低延迟响应时间之内,存储和访问任何规模的数据,另外SSD还具有很高的I / O性能,能够处理大规模请求工作负载我们来看看DynamoDB的不适合的使用场景:如果需要存储大量数据,但这些数据的访问频率很低,但DynamoDB可能不太适合。DynamoDb的数据模型是无模式的,可认为是简单的键值模式不过特殊的处理在它的主键...

大圣的博客 3472

DynamoDB实现原理分析

DynamoDB是Amazon的一个高可用的键-值存储系统。用以提供一个“永远在线”可用存储。为了达到这个级别的可用性,DynamoDB在某些故障场景中将牺牲一致性。它大量使用对象版本和应用程序协助的冲突协调方式以提供一个开发人员可以使用的新颖的接口。在一个分布式的存储系统中,除了数据持久化组件,系统还需要有以下的考虑:负载均衡成员(membership)和故障检测故障恢复副本同步过载处理状态转移...

小龙的博客 1万+

Amazon Dynamo

Amazon Dynamo

huobengle 247

dynamoDB数据库

首先安装AWSCLI 安装后;在cmd输入 aws --version 检验是否安装成功 然后;在cmd输入:aws configure设置aws的密钥 最后使用一下代码进行数据库的CRUD操作 如果能帮助大家请手动点赞 package com.skysoft.modules.controller;import com.amazonaws.services.dynamodbv2.AmazonDyn

逍遥绝情的博客 2656

DynamoDB简介

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html DynamoDB是AWS提供的key/value和document型数据库。DynamoDB既是key/value数据库,也是document数据库,原因在下面解释。 1,所有的数据都存储在SSD中,可以...

我的学习成长日记 3018

Dynamodb 学习笔记二(查询)

Dynamodb提供的三种查询操作: GetItem 明确主键的查询 Query 带条件的查询 Scan 不带条件的查询 people_id people_name year_of_birth 100 Tom 1999 101 Jim 1999 102 Lucy 1999 ...

金戈铁马 3393

Hi!欢迎使用一个Dynamo风格的分布式Redis集群分发管理系统WheatRedis - V2EX

http://www.v2ex.com/t/65502

weixin_33753003的博客 105

详细解析Dynamo存储引擎

Dynamo 是个什么东东呢?他是 Amazon 公司的一个分布式存储 引擎。那么这个什么引擎又是什么?   首先,假设一个场景,你的网站要存储用户登陆的IP。这个问题怎么解决 呢?传统的方法是用数据库。数据库提供了方便的操作接口,复杂的查询能力以及事物的保证。   好,现在假设大家都很喜欢你的网站,访问的人 越来越多。一个数据库已经处理不过来了。于是你安装了3台数据库主机,把用户分成了三类(

你们王哥的博客 2209
上一篇: 干货 | 携程分布式图数据库Nebula Graph运维治理实践
下一篇: 干货 | 携程火车票iOS项目开发体验优化实践
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值