写入 Amazon DynamoDB(PHP API)的速度慢得离谱

2024-03-13

这个问题已经发布在AWS论坛上,但仍未得到解答https://forums.aws.amazon.com/thread.jspa?threadID=94589 https://forums.aws.amazon.com/thread.jspa?threadID=94589

我正在尝试执行一长串短项目(大约 1.2 亿个)的初始上传,以便稍后通过唯一密钥检索它们,这似乎是 DynamoDb 的完美案例。

然而,我目前的写入速度非常慢(每 100 次写入大约需要 8-9 秒),这使得初始上传几乎不可能(按照目前的速度大约需要 3 个月)。

我已经阅读了 AWS 论坛来寻找答案,并且已经尝试了以下操作:

  1. 我从单个“put_item”调用切换为批量写入 25 个项目(建议最大批量写入大小),并且每个项目都小于 1Kb(这也是建议的)。即使我的 25 个项目的大小也低于 1Kb,这也是很常见的,但这并不能保证(并且无论如何都不重要,因为我知道只有单个项目的大小对 DynamoDB 很重要)。

  2. 我使用最近引入的欧盟区域(我在英国)通过调用 set_region('dynamodb.eu-west-1.amazonaws.com') 直接指定其入口点,因为在 PHP 中显然没有其他方法可以做到这一点API。 AWS 控制台显示该表位于正确的区域,因此可以正常工作。

  3. 我通过调用disable_ssl()禁用了SSL(每100条记录增加1秒)。

尽管如此,包含 100 个项目的测试集(对 25 个项目进行 4 次批量写入调用)的索引时间绝不会少于 8 秒。每个批量写入请求大约需要 2 秒,因此并不是第一个请求是即时的,后续请求就很慢。

我的表预置吞吐量是 100 个写入单元和 100 个读取单元,到目前为止应该足够了(也尝试了更高的限制以防万一,但没有效果)。

我还知道请求序列化会产生一些费用,因此我可能可以使用队列来“累积”我的请求,但这对于batch_writes真的那么重要吗?我认为这不是问题,因为即使是一个请求也需要很长时间。

我发现有些人修改 API 中的 cURL 标头(特别是“Expect:”)以加快请求速度,但我认为这不是正确的方法,而且自该建议发布以来 API 也已更新。

我的应用程序运行的服务器也很好 - 我读到有时 CPU 负载会达到极限,但就我而言,一切都很好,只是网络请求花费了太长时间。

我现在陷入困境 - 还有什么我可以尝试的吗?如果我没有提供足够的信息,请随时询问更多信息。

最近还有其他线程,显然是关于同一问题的,here https://forums.aws.amazon.com/thread.jspa?messageID=341508(但到目前为止还没有答案)。

这项服务应该是超快的,所以我一开始就对这个问题感到困惑。


如果您从本地计算机上传,速度将受到您和服务器之间的各种流量/防火墙等的影响。如果我致电 DynamoDB,每个请求都会花费 0.3 秒,这仅仅是因为往返澳大利亚的时间。

我的建议是使用 PHP 创建一个 EC2 实例(服务器),将脚本和所有文件作为一个块上传到 EC2 服务器,然后从那里进行转储。 EC2 服务器应该具有与 DynamoDB 服务器相当的速度。

如果您对自己使用 LAMP 设置 EC2 没有信心,那么他们有一项新服务“Elastic Beanstalk”可以为您完成这一切。当您完成上传后,只需烧掉服务器 - 希望您可以在他们的“免费套餐”定价结构内完成所有这些:)

不能解决长期的连接问题,但会减少三个月的上传时间!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

写入 Amazon DynamoDB(PHP API)的速度慢得离谱 的相关文章

  • 在高负载站点中使用 PHP 的策略

    在你回答这个问题之前 我从未开发过任何足够流行的东西来达到高服务器负载 把我当作 叹气 一个刚刚登陆地球的外星人 尽管我了解 PHP 和一些优化技术 我正在开发一个工具PHP如果效果好的话 可以吸引相当多的用户 然而 虽然我完全有能力开发该
  • 开发中的 Laravel 和视图缓存——无法立即看到变化

    我和一些朋友决定开始一个项目 我们偶然发现了 Laravel 并认为它可能是一个很好的工具 我们开始在本地使用它来开发一些页面 并注意到一些奇怪的事情 当我们用不同的信息更新视图时 大约需要 5 到 10 分钟视图信息才会发生变化 这就像
  • 如何用破折号替换所有大写字母,用正则表达式替换所有小写字母?

    如何在 php 中用破折号和小写字母替换所有大写字母 Such as understandRegexBetter to understand regex better 我的 Google fu 和对以下代码的实验并没有让我走得太远 echo
  • 将变量从 PHP 发送到 Javascript

    我在两个单独的文件中有以下代码 其中一个是 javascript 另一个是 php JavaScript xmlhttp new XMLHttpRequest xmlhttp onreadystatechange function if t
  • Laravel 克隆查询字符串

    是否可以克隆一个查询字符串 以便我可以编写一次并在不影响其他结果的情况下进行长时间的更改 query DB table users gt where id 123 queryGet query queryPaginate query que
  • 合并数组而不丢失键索引

    我有两个数组 Menu Navigation var array public nav top array 100 gt Dashboard 200 gt Sell 300 gt Products 400 gt History 500 gt
  • 如何在 nginx 反向代理后面安全地检测 CakePHP 中的 SSL?

    CakePHP 我见过的所有版本 检查 SERVER HTTPS 查看请求是否是通过 HTTPS 而不是普通 HTTP 发出的 我使用 nginx 作为负载均衡器 后面是 Apache 应用程序服务器 由于 SSL 连接在负载均衡器处终止
  • 从 MySQL 返回结果时的数字顺序

    我的数据库表中有以下类型的标题 Topic 1 blah blah Topic 2 blah blah Topic 3 blah blah Topic 10 blah blah Topic 11 blah blah etc 选择查询将始终返
  • Netbeans (PHP) 中的变量类型提示

    只是好奇 Netbeans 中是否有一种方法可以为常规变量提供类型提示 以便智能感知能够识别它 我知道你可以对类属性 函数参数 返回类型等执行此操作 但我不知道如何对常规变量执行此操作 当您有一个可以返回不同对象类型 如服务定位器 的方法时
  • 如何设置 Zend Cache Storage 的过期时间?

    我想在 Zend 文件系统缓存中存储一 些 XML 并让它在 30 分钟后过期 如何设置缓存持续时间 过期时间 我使用 Zend 缓存作为组件 而不是在完整的 ZF2 应用程序的上下文中 cache Zend Cache StorageFa
  • Laravel 规则和正则表达式 (OR) 运算符的问题

    我的 Laravel 规则和正则表达式操作有一个小问题 基本上 规则是一个数组 如下所示 room gt required alpha num min 2 max 10 我遇到的问题是使用正则表达式和 时 或 运算符 例如 cid gt r
  • 使用 AJAX 来回发送信息

    使用 post 你可以向服务器发送信息 但是当你需要从服务器接收信息时怎么办呢 信息如何从可以由 php 变量保存的方式变为可以由 javascript 变量保存的方式 反之亦然 这与您的问题更相关 http docs jquery com
  • Symfony - 自定义验证器和依赖注入

    我正在尝试对自定义验证器使用依赖项注入 以便能够使用实体管理器 我遵循 Symfony 示例 依赖注入 http symfony com doc current cookbook validation custom constraint h
  • 预期响应代码 250,但收到代码“530”,并显示消息“530 5.7.1 需要身份验证”

    我尝试配置 SMTP 邮件时遇到此错误laravel 这是我的配置 env MAIL DRIVER smtp MAIL HOST smtp mailtrap io MAIL PORT 2525 MAIL USERNAME fff3c01db
  • 让 PHP 脚本永远循环执行队列系统中的计算作业

    目前 我有一个永远在我的服务器上运行的 perl 脚本 检查 SQS 是否有要计算的数据 该脚本已经运行了大约 6 个月 没有出现任何问题 所以 现在我想切换到 PHP 的 CLI 并让脚本永远循环在那里 主要是因为我对PHP比较熟悉 Ba
  • Cognito SRP 身份验证 JAVA SDK

    我正在尝试使用 Cognito 验证 Java 应用程序 我在Python中使用了warrant库 效果非常好 但我现在想在java中做同样的事情 我的 Python 函数用于身份验证warrant https github com cap
  • PHP fscanf 与 fgets

    我可以使用读取一行中的整个字符串fgets but fscanf 没有这样做 根据PHP手册 fscanf 根据格式解析文件的输入 功能fscanf 类似于sscanf 但它从与句柄关联的文件中获取输入 并根据指定的格式解释输入 这在文档中
  • Symfony2 / FOSUserBundle - 登录后根据角色重定向

    我想根据用户的角色自定义登录后的重定向 仅供参考 我用symfony 2 8 我创建这个类
  • 逻辑编程帮助

    A if infos 空和inputs empty 删除 B if infos空和inputs 空的 添加 C if infos 空和inputs 等于信息 添加 我们可以有这样的 if B it s the most common ope
  • 需要从我的应用程序将文件上传到谷歌文档并存储对上传文件的引用

    我正在开发一个基于谷歌应用程序的基本系统 就像我之前定义的那样 我正在构建一个简单的订购系统 并且对于每个下订单 我都会附加一个文件或文档 我希望能够设置它 以便我上传的任何文件都会上传到谷歌文档中 并且我能够以某种方式从我自己的应用程序维

随机推荐

  • 无法为 android 中的微调器设置 OnItemClickListener

    在定制的RecyclerView Adapter
  • 如何生成随机概率分布 julia

    我在字典中有一个键列表 我想为每个项目分配一个 0 到 1 之间的数字 使分配的数字总和为 1 如何做到这一点 我尝试使用 rand 进行一些操作 但没有成功 有什么建议么 更数学的答案是使用狄利克雷分布 https en wikipedi
  • 类组件的 useEffect 替代品

    我刚刚了解到在功能组件中我可以使用useEffect留意任何副作用 例如 使用时localStorage 这确保我的状态与效果挂钩 我想在我的基于类的组件中具有类似的功能localStorage 我怎样才能确保我的状态在发生任何变化时立即更
  • 从 Java 应用程序即时打开 PDF 文件

    有没有办法让代码以独立于平台的方式在Java应用程序中打开PDF文件 我的意思是在 Windows 中使用批处理文件可以做到这一点 有没有其他方法可以使用独立于平台的代码来动态打开 PDF 文件 I d try Desktop open F
  • 使用 Linq + Include 排序

    我与两个实体有一对多关系 Order int OrderId string OrderNumber OrderItem int ItemId int sequence Product int ProductId string Product
  • 使用带有 SL 和 TP 的 CCXT 使用 Python 在 FTX 上创建市场订单

    有人有如何创建带有止盈和止损的市价订单的示例吗 我已经阅读了文档 因为这是我第一次做这样的事情 所以我真的不明白 我正在尝试创建一个 API 端点 该端点接收来自 TradingView 的警报并下订单 我真的不想使用限价订单 因为我只想以
  • Oracle - 带有可选参数的索引使用

    我使用以下技巧来索引具有一些空值的列 create index xx people idx1 on xx people id number 1 这很好用 遗憾的是 当您使用可选参数时 这并没有帮助 select from xx people
  • Autofixture构造函数注入延迟加载

    我在单元测试中使用自动装置 它作为自动模拟器的工作方式非常棒 但是 当我将延迟加载的对象注入到我的类中时 我遇到了问题 例如 public class MyClass IMyClass private Lazy
  • Facebook“点赞”会产生“更新页面时出现内部错误”。

    几个月前 我在我的博客中添加了一个 赞 按钮 一切运行良好 今天早上我突然添加了一篇新帖子 不知出于什么原因 点赞按钮现在坏了 每次我点击 喜欢 时 我都会收到此错误 There was an internal error when upd
  • openXmlSdk 在运行元素内插入新行

    我里面有文字Run元素 我正在尝试更换 r在字符串中带有line break 正文如下 This is an example project for testing purposes rThis is all sample data non
  • Kibana 无法在 Windows 上连接到 elasticsearch

    我正在运行 Elastic Search 7 6 它工作正常http 本地主机 9200 http localhost 9200 我能够使用 REST API 将值添加到索引 现在 当我启动 kibana 7 6 时 出现以下错误 log
  • Apache 和 MySQL 是多线程应用程序吗?

    我想知道是否默认安装Apache and MySQL on 视窗 Linux是否是多线程的 这取决于如何看待它 MySQL允许您同时运行多个线程 这可用CPU RAM资源 但它不允许您使用多个线程运行单个查询 Apache是多线程的 这是
  • Azure Artifacts - 与其他项目共享项目范围的源

    我们的组织内有许多项目 其中一个项目创建了一个项目范围的 Azure Artifact 源 他们希望与我们的其他项目共享 但是 当其他项目访问其工件页面时 从提要下拉列表中 他们只能看到 组织范围的提要 而 项目范围的提要 下没有任何内容
  • LoadError: 无法加载此类文件 -- 英语

    我们的代码确实 require english 它在本地工作 但我们在 CI 服务器上收到此错误 LoadError 无法加载此类文件 英语 有任何想法吗 事实证明解决办法是改变 require english into require E
  • 如何使 jquery click 事件仅在第一次单击时触发

    我有两个 div basic1 和 basic2 我希望 basic1 在单击时淡出 而 basic2 在我工作得很好的情况下淡出 唯一的问题是 一旦 basic2 淡入 如果用户继续单击链接 navbar1 它将一遍又一遍地淡入该 div
  • 在图像视图的触摸事件上填充两个图像叠加,如搜索栏

    有两个图像黑色和蓝色 同时触摸蓝色图像 它应该像进度一样填充 我在不使用画布的情况下使用多个剪切图像实现了但没有得到smoothness触摸时 例如 实际上 我正在尝试实现类似于我上面提到的 100 个俯卧撑应用程序 我得到了一个link
  • 在递归函数中使用 .Find

    我正在尝试使用以下命令查找工作表中的行号 Find递归函数中的函数 我设置了一个名为Found Find 它效果很好 一点点 我在递归深度为 1 级时设置它 然后在递归深度为 2 级时再次设置它 然后 我的代码找到路径的末尾并开始备份 直到
  • 覆盖 ActiveRecord 对模型和集合的查找的最简洁方法是什么?

    我有重写 Ar 的 find 方法的库代码 我还包括所有 Association 类的模块 因此 MyModel find 和 parent my models find 都可以工作并应用正确的范围 我的代码基于 will paginate
  • MemoryError:无法分配具有形状和数据类型对象的数组

    我想在两个数据集之间执行内部联接 如下所示 theme ids head id Loan Theme ID Loan Theme Type Partner ID 0 638631 a1050000000skGl General 151 1
  • 写入 Amazon DynamoDB(PHP API)的速度慢得离谱

    这个问题已经发布在AWS论坛上 但仍未得到解答https forums aws amazon com thread jspa threadID 94589 https forums aws amazon com thread jspa th