”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用适用于 Java 的 AWS 开发工具包实现 Amazon Aurora Serverless 的数据 API - 冷启动和热启动的部分比较:数据 API 与 DynamoDB

使用适用于 Java 的 AWS 开发工具包实现 Amazon Aurora Serverless 的数据 API - 冷启动和热启动的部分比较:数据 API 与 DynamoDB

发布于2024-07-29
浏览:964

Data API for Amazon Aurora Serverless vith AWS SDK for Java - Part omparing cold and warm starts: Data API vs DynamoDB

介绍

在系列的第 7 部分中,使用适用于 Java 的 AWS 开发工具包的 Amazon Aurora Serverless v2 的数据 API - 数据 API 与 SnapStart 的结合,我们使用 Data 测量了连接到 Amazon Aurora Serverless v2 PostgreSQL 数据库的 Lambda 函数的冷启动时间和热启动时间3 个用例的 API :

  • 未在 Lambda 函数上启用 SnapStart
  • 在 Lambda 函数上启用 SnapStart,但没有启动优化
  • 在 Lambda 函数上启用 SnapStart 并进行启动优化(在 PostgreSQL 数据库上预热 SQL 语句执行)。

在本文中,我们希望将这些测量值与使用 DynamoDB 而不是 Amazon Aurora Serverless v2 的 Data API 时的测量值进行比较。

比较 Lambda 冷启动和热启动:Amazon Aurora Serverless v2 的数据 API 与 DynamoDB

在我关于 Lambda SnapStart 的文章系列中,我们已经对类似的应用程序进行了此类测量,但在文章中使用不同的 Lambda 内存设置测量 Java 21 的热启动。

Amazon Aurora Serverless v2 和 DynamoDB 的应用程序数据 API 非常相似:

  • 它们提供从数据库存储和检索产品的逻辑
  • 两个项目的 Lambda 函数都有 1024 MB 内存设置
  • 两者的部署工件大小均为 18 MB 左右
  • 两个项目中的 Lambda 函数都使用默认同步 HTTP Apache 客户端与数据库进行通信
  • 两个项目的 Lambda 函数都使用 x86_64 架构

现在让我们将所有测量值放在一起。

冷 (c) 和热 (m) 启动时间(以毫秒为单位):

方法 c p50 c p75 c p90 c p99 c p99.9 c 最大 w p50 w p75 w p90 w p99 w p99.9 w 最大值
数据 API,未启用 SnapStart 3154.35 3237 3284.91 3581.49 3702.12 3764.92 104.68 173.96 271.32 572.11 1482.89 2179.7
DynamoDB,未启用 SnapStart 3157.6 3213.85 3270.8 3428.2 3601.12 3725.02 5.77 6.50 7.81 20.65 90.20 1423.63
数据 API,无需启动即可启用 SnapStart 1856.11 1994.61 2467.83 3229.11 3238.80 3241.75 61.02 113.32 185.37 639.35 1973.30 2878.5
DynamoDB、SnapStart 无需启动即可启用 1626.69 1741.10 2040.99 2219.75 2319.54 2321.64 5.64 6.41 7.87 21.40 99.81 1355.09
数据 API,通过启动启用 SnapStart 990.84 1069.04 1634.84 2120.00 2285.03 2286.9 60.06 106.35 185.37 581.27 1605.37 2658.24
DynamoDB、SnapStart 通过启动启用 702.55 759.52 1038.50 1169.66 1179.05 1179.36 5.73 6.51 7.87 21.75 92.19 328.41

结论

在本文中,我比较了使用 Data API 连接到 Amazon Aurora Serverless v2 PostgreSQL 数据库的 Lambda 函数与连接到 DynamoDB 数据库的 3 个用例的冷启动时间和热启动时间的测量结果:

  • 未在 Lambda 函数上启用 SnapStart
  • 在 Lambda 函数上启用 SnapStart,但没有启动优化
  • 在 Lambda 函数上启用 SnapStart 并启动数据库请求

我们观察到,在 Lambda 函数上未启用 SnapStart 的情况下,两者的冷启动时间相当相似。 如果启用了 SnapStart(没有启动,尤其是启动启动),Amazon Aurora Serverless v2 的数据 API 的冷启动时间明显更长,特别是对于 >= 90 的百分位数。我需要更深入地挖掘以了解这种差异,因为我没有预计它会那么大,尤其是在使用底漆的情况下。也许原因是像 DynamoDB 这样的 AWS 原生服务更能感知 SnapStart,我可以更好地处理连接恢复。

与 DynamoDB 相比,Amazon Aurora Serverless v2 的数据 API 的热启动(执行)时间始终要高得多,我也预计 DynamoDB 以其单位数或两位数毫秒响应时间而闻名。

版本声明 本文转载于:https://dev.to/aws-builders/data-api-for-amazon-aurora-serverless-v2-with-aws-sdk-for-java-part-9-comparing-cold-and-warm-starts-data-api-vs-dynamodb-2pg2?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何创建DPI感知Windows窗体应用以避免缩放问题
    如何创建DPI感知Windows窗体应用以避免缩放问题
    [2 许多Windows表单应用程序会在Monitor的DPI设置更改时会出现问题。 控件可能会错过或缩放错误。 创建DPI Aware应用程序对于避免这些问题至关重要。 autoscalemode = autoscalemode.dpi 是一个起点,这不是一个完整的解决方案。 对于强大的D...
    编程 发布于2025-05-01
  • Java中文件扩展名提取技巧
    Java中文件扩展名提取技巧
    如何轻松地在Java中提取文件扩展名 example usage condusion [&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& filenameutils.getExtension io中提供了一个轻松...
    编程 发布于2025-05-01
  • Python操作MySQL获取最新插入ID方法
    Python操作MySQL获取最新插入ID方法
    Retrieving Last Inserted ID after INSERT into MySQL Database with PythonWhen performing INSERT operations into a MySQL database using Python, obtainin...
    编程 发布于2025-05-01
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-05-01
  • Spark DataFrame添加常量列的妙招
    Spark DataFrame添加常量列的妙招
    在Spark Dataframe ,将常数列添加到Spark DataFrame,该列具有适用于所有行的任意值的Spark DataFrame,可以通过多种方式实现。使用文字值(SPARK 1.3)在尝试提供直接值时,用于此问题时,旨在为此目的的column方法可能会导致错误。 df.withco...
    编程 发布于2025-05-01
  • 编译器报错“usr/bin/ld: cannot find -l”解决方法
    编译器报错“usr/bin/ld: cannot find -l”解决方法
    错误:“ usr/bin/ld:找不到-l “ 此错误表明链接器在链接您的可执行文件时无法找到指定的库。为了解决此问题,我们将深入研究如何指定库路径并将链接引导到正确位置的详细信息。添加库搜索路径的一个可能的原因是,此错误是您的makefile中缺少库搜索路径。要解决它,您可以在链接器命令中添加...
    编程 发布于2025-05-01
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-05-01
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-05-01
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-05-01
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 例如,在提供的示例中,将以下代码添加到CSS中,将解决余量问题: body H1 { 保证金顶:-40px; } 此方法更精确,避免了由全局保证金重置引...
    编程 发布于2025-05-01
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-05-01
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-05-01
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    编程 发布于2025-05-01
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-05-01
  • Python元类工作原理及类创建与定制
    Python元类工作原理及类创建与定制
    python中的metaclasses是什么? Metaclasses负责在Python中创建类对象。就像类创建实例一样,元类也创建类。他们提供了对类创建过程的控制层,允许自定义类行为和属性。在Python中理解类作为对象的概念,类是描述用于创建新实例或对象的蓝图的对象。这意味着类本身是使用类关...
    编程 发布于2025-05-01

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3