database - 关系与非关系数据库 - 运动结果和模式
问题描述
我希望将一些历史运动结果整合到一个数据库中,这将允许我查询它们以用于构建应用程序和可视化的未来目的。
我对该领域的理解使我相信我可以采用非关系方法(例如 Amazon 的 DynamoDB),这样我就不必考虑数据库资源、大小等作为数据大小和查询其中,成长。
然后,我计划使用 Amazon Lambda 来处理数据的导入并处理对传入查询的响应。
我的两个问题是:
- 这是有效的方法吗?
- 非关系模式会是什么样子?
为了帮助理解第二个问题,如果这是一个关系数据库,则表看起来像这样。
- 活动
- 比赛(存储结果和相关字段的位置)
- 运动员
- 团队
解决方案
如果您的查询将大量加入这些表,则首选关系数据库。尽管可以使用 DynamoDB,但您将很难加入这些表。DynamoDB 的一个让开发人员难以理解的特性是索引。您必须使用哈希键进行搜索。所以你必须小心选择索引。
但是,如果数据就像查找一样,例如比赛 ID 123,获胜者是运动员 A。DynamoDB 会蓬勃发展,因为使用它有优势(可扩展性、最少的管理等)
就个人而言,我不喜欢 dynamoDB 在列出某些东西时(使用搜索、分页等)。当然,您可以建立一个搜索索引,但对于更简单的应用程序,这将是一种矫枉过正。
选择
如果您只对构建数据的可视化和聚合感兴趣,您可以使用 redshift 或 S3 来存储数据。稍后运行一些聚合函数。然后将聚合保存到 dynamodb 或 rds 中。
对于仅由最终用户查询和使用的数据,我考虑使用 dynamodb 和 RDS 数据库。
推荐阅读
- html - 如何使 5 行引导网格占据整个窗口?
- react-native - 如何在来自映射函数的组件之间添加空间?
- amazon-web-services - 将 API Gateway websocket 直接映射到无服务器中的 kinesis 流
- mysql - 当我使用另一个表的 SUM 时无法解析列
- c++ - 实例化新类时未调用方法
- java - 使用 java API 编写 apache 箭头格式时是否存在大小限制/问题
- ios - signInWithPhoneNumber() 在 react-native 中不起作用
- android - 提供的手机格式不正确
- forms - 如何以 xamarin 形式反序列化视图模型中的对象
- laravel - 将帖子保存在数据库中后如何获取帖子的ID?