繁体   English   中英

使用 S3 作为数据库存储和查询应用程序数据

[英]Using S3 as a database to store and query application data

使用 Amazon S3(或与 S3 兼容的 object 存储)作为应用程序的主数据库有哪些限制。

这个库看起来很有希望使用这个 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 操作和查询的数据库变得可行?

  • 创建、读取、更新和删除
  • 查询“字段”给定条件(字段等于、最小值-最大值、包含)
  • 正则表达式搜索(文本搜索)

Amazon S3 实际上是一个非常大的 NoSQL 数据库。 文件名是键,内容是值。

但是,object 的内容是不可变的,因此如果要“更新”某些数据,则需要完全替换 object 的内容。

例如,Amazon.com 实际上将 S3 用作历史订单的只读 NoSQL 数据库。 订单满一年后,将无法退货/更改。 因此,数据被导出到 S3 并从数据库中删除。 查询速度稍慢,但很少访问旧订单,因此这是可以接受的。

Amazon S3 有一个名为S3 Select的功能,它允许对单个对象执行 SQL。 这在从大型 object 中寻找几行时很有用,而无需下载 object。

Amazon Athena也非常适合查询存储在 Amazon S3 中的数据。 它基于 Presto,允许对多个对象进行复杂的 SQL 操作,并支持列格式(Parquet、ORC)、分区和压缩。

如果您想将 Amazon S3 用作数据库,请考虑使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM