検証用にfluent-plugin-dynamodb-altというのを作りました。
検証用なので、RubyGems.orgには未登録。積極的にメンテナンスする気はないです。
fluent-plugin-dynamodbの微妙な点
- PKがかぶる
- BatchWriteItemでExpectedが使えない
fluent-plugin-dynamodb-altの特徴
Expectedの使い方
以下のように設定すると、
expected id NULL,time LT ${time}
conditional_operator OR
次のようなExpectedになります。
{
:expected=>{
"id"=>{:comparison_operator=>"NULL"},
"time"=>{:comparison_operator=>"LT", :attribute_value_list=>["2014-08-17T16:57:45Z"]}
},
:conditional_operator=>"OR"
}
${time}のattribute_value_listは{}内のキーでレコードから取得します。
misc
- aws-sdk 1.0系だとExpectedでcomparison_operatorが使えないようにみえます(ソースは追ってないです)
- aws-sdk 2.0系でput_itemのリクエストの記述が間違ってます。
item: {"key" => {s: "value"}}ではなくitem: {"key" => "value"}と書く必要があります - BatchWriteItemでExpectedを使えないのは厳しいですねぇ
もやもや
DynamoDBはなんだかんだで結構高いですよね。特にWriteが。 10,000w/sで$6,000/月ぐらいになるので普通のKVS感覚で使うと破産しそう。
BatchWriteItemつかってもお値段は下がりそうにないので、非同期でキーを集約して極力Writeを減らす・オートスケールをがんばる・低いスループットでリトライしまくる、みたいな小細工が必要そうですがみなさんどうしているんだろう…
宣伝
ddbcli、便利ですよ〜