🤖
[API技術選定3] DB選定
概要
API開発にDBを導入するために個人開発で利用可能なDBを選定した。
結論
AWS DynamoDBを使う。
理由
小規模のサービスでは普通にRDSを使うとラーニングコストの大半がDBの運用維持費になるはず。
OracleやMySQLを使うとなるとどのDBも値段がとっても高い!月数千円は余裕でかかる。
以下の記事がとてもまとまっている。完全同意。
なので今回はSQLを捨ててAmazon DynamoDBを利用する。
SDKはguregu/dynamo
GoからDynamoDBにアクセスする方法はguregu/dynamoを利用する。以下の記事が
DB接続
sess := session.Must(session.NewSession())
db := dynamo.New(sess, &aws.Config{Region: aws.String("us-west-2")})
table := db.Table("Widgets")
データ定義
type widget struct {
UserID int // Hash key, a.k.a. partition key
Time time.Time // Range key, a.k.a. sort key
Msg string `dynamo:"Message"` // Change name in the database
Count int `dynamo:",omitempty"` // Omits if zero value
Children []widget // List of maps
Friends []string `dynamo:",set"` // Sets
Set map[string]struct{} `dynamo:",set"` // Map sets, too!
SecretKey string `dynamo:"-"` // Ignored
}
select
// 以下のSQL(Oracle)と同義
// SELECT
// UserID
// FROM
// TABLE
// WHERE
// Time = w.Time and
// rownum < 1
var result widget
err = table.Get("UserID", w.UserID).
Range("Time", dynamo.Equal, w.Time).
One(&result)
select All
var results []widget
err = table.Scan().All(&results)
insert
w := widget{UserID: 613, Time: time.Now(), Msg: "hello"}
err := table.Put(w).Run()
Discussion