java—使用s3作为数据库来存储和查询应用程序数据

3mpgtkmj  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(538)

使用amazons3(或s3兼容的对象存储)作为应用程序的主数据库有什么限制。
使用此api,此库看起来很有前途:

// Setup Dyno
Dyno dyno = DynoClientBuilder
    .simple()
    .withEndpointConfig("s3.wasabi.sys", "us-east-1")
    .withCredentials(ACCESS_KEY, SECRET_KEY)
    .withBucket("dyno")
    .withKeySpace(":")
    .withBufferSize(1024)
    .build();

// Here's a sample way to create a "User" entity with Dyno

// First create an entity with user_id this will prevent creation of another user 
// with the same username

Entity user = EnityBuilder
    .create(dyno)
    .with("username", "dino")
    .with("user_id")
    .build(uuid(), String.class)
    .putIfAbsent();

进一步说,这个代码:

// Since the username "dino" has been secured we can assign the password simply by 
// puting a new entity with the assigned password:

Key key = EnityBuilder
    .create(dyno)
    .with("user_id", user.getValueString())
    .with("password")
    .build(sha256("the_password"), String.class)
    .putIfAbsent();

同样,对于这个问题,使用s3有什么限制?什么使使用s3作为一个可以执行标准crud操作和查询的数据库变得可行?
创建、读取、更新和删除
查询“字段”给定条件(字段等于,最小最大,包含)
正则表达式搜索(文本搜索)

bkkx9g8r

bkkx9g8r1#

如果您想使用amazons3作为数据库,请查看使用athena。
https://docs.aws.amazon.com/athena/latest/ug/what-is.html
例如,如果要在java中实现此功能,请参阅以下aws java v2示例:
https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/athena/src/main/java/aws/example/athena

llmtgqce

llmtgqce2#

amazons3实际上是一个非常大的nosql数据库。文件名是键,内容是值。
但是,对象的内容是不可变的,因此如果要“更新”某些数据,则需要完全替换对象的内容。
例如,amazon.com实际上使用s3作为历史订单的只读nosql数据库。一旦订单过期一年,就不能退货/换货。因此,数据被导出到s3并从数据库中删除。查询速度稍慢,但很少访问旧订单,因此这是可以接受的。
amazons3有一个名为s3select的特性,允许对单个对象执行sql。这在从大型对象中查找几行代码时非常有用,无需下载对象。
AmazonAthena也非常适合查询存储在AmazonS3中的数据。它基于presto,允许对多个对象执行复杂的sql操作,并支持列格式(parquet、orc)、分区和压缩。

相关问题