TL; DR
我有大约200万写入一个表上月和0读取.每个月的第一天,我需要阅读上个月写的所有行并生成CSV +统计信息.
如何在此方案中使用DynamoDB?如何选择READ吞吐量?
详细描述
我有一个记录客户端请求的应用程序.它有大约200个客户.客户需要在每个月的第一天收到一份CSV,其中包含他们所做的所有请求.他们还需要收费,为此我们需要根据他们提出的请求计算一些统计数据,按请求类型进行分组.
因此,在本月底,客户收到如下报告:


我已经找到了两个解决方案,但我仍然不相信它们中的任何一个.
第一个解决方案:好的,每月的最后一天我增加READ吞吐量,然后运行map reduce工作.作业完成后,我将容量减少回原始值.
缺点:未完全自动化,在作业启动时无法使用DynamoDB容量的风险.
第二个解决方案:我可以在日常或每小时的例行程序中将CSVs +统计数据的生成分解为小型工作.我可以在S3上存储部分CSV,并且在每个月的第一天我可以加入这些文件并生成一个新文件.统计数据将更容易生成,只是从每日/每小时统计数据中得出一些计算结果.
缺点:我觉得我正在把一些简单的东西变成复杂的东西.
你有更好的解决方案吗?如果没有,你会选择什么解决方案?为什么?
我希望在没有使用Timeout模块的情况下在控制器的操作中实现以下行为:
class AdminController < ApplicationController
def example
Timeout.timeout(params[:timeout].to_i) do
... # try to process the request within params[:timeout] seconds
end
rescue Timeout::Error
render nothing: true, status: :gateway_timeout
end
end
Run Code Online (Sandbox Code Playgroud)
我想避免使用Timeout,因为它导致我的应用程序中出现许多错误,包括数据库连接泄漏.报告的其他一些问题:http: //www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/
我改变了我的Facebook页面标签应用程序要求权限的方式.
我正在使用FB Dialog的javascript方法,现在我正在使用重定向方法(其中用户被重定向到FB页面,其中要求权限,然后被重定向回到Facebook页面选项卡).
改变的原因是我相信这种方法比使用javascript对话框会带来更少的错误和问题.
使用重定向方法时,我需要指定在提供权限后用户将被重定向的URL.我想这个网址是安装了应用程序的Facebook页面标签的网址.
构建重定向的URL时,我知道当前的page_id和我的app_id.有了这些信息,我需要构建facebook页面选项卡url,它应该如下所示:
https://www.facebook.com/pages/PAGE-SLUG/ {#APP_ID}?sk = app _ {#APPL_ID}
问题是我不知道什么是PAGE-SLUG.我用上面的url运行的测试(使用PAGE-SLUG作为任何东西)最终重定向到正确的URL.但是,知道Facebook是一个非常不稳定的平台,我想知道有更好的方法来构建这个重定向网址.
编辑:上述方法有问题.默认情况下,当facebook用户不使用SSL时,重定向会丢失SSL协议并使用HTTP链接.
每次我使用任何$资源命中服务器时,我都希望在用户失败时向我的用户显示相同的警报.
今天看起来像:
function tryAgain() { alert("try again") }
myResource.query().$promise.catch(tryAgain);
myResource.update(...).$promise.catch(tryAgain);
myResource.delete(...).$promise.catch(tryAgain);
otherResource.query().$promise.catch(tryAgain);
Run Code Online (Sandbox Code Playgroud)
有没有办法为ngResource配置默认错误处理功能?我正在寻找类似的东西:
$resource.somethingMagicHere.defaults.catch(tryAgain);
Run Code Online (Sandbox Code Playgroud)