redis - 使用 Redis 的应用程序的数据模型设计

标签 redis data-modeling

I am new to redis and I am trying to figure out how redis can be used. So please let me know if this is a right way to build an application.

我正在构建一个只有一个数据源的应用程序。我计划每晚运行一项作业,将数据放入文件中。

现在我有一个前端应用程序,需要以不同的格式呈现这些数据。

示例应用程序用例
每晚下载大学处理过的申请。
显示有多少申请被批准或拒绝。
按州显示申请数量。
让用户通过应用程序 ID 搜索应用程序。

我正在考虑使用redis,而不是像关系数据库那样使用postgres/mysql。我计划通过以下方式存储数据。

  1. 应用 ID -> 应用详细信息
  2. 状态 -> 应用程序 ID 列表
  3. 已批准 -> 申请 ID 列表(按日期?)
  4. 已拒绝 -> 申请 ID 列表(按日期?)

这是将数据存储到 Redis 的正确方法吗?

此外,如果有人查询特定日期加利福尼亚州的所有申请, 我将能够在一次调用中提取应用程序 ID,但要获取每个应用程序的详细信息,我是否需要发出另一个请求?

最佳答案

警告:

Instead of using postgres/mysql like relational database, I am thinking about using redis.

为什么? Redis 是一个令人惊叹的数据库,但不要用正确的锤子钉错误的钉子。如果您需要大规模的实时性能,请使用 Redis,但如果您需要的话,请不要尝试让它取代 RDBMS。

答案:

从 Redis 高效获取数据来回答您的查询取决于您将如何存储数据。因此,要确定“正确”的数据模型,您首先需要定义查询。您提出的数据模型只是数据的描述 - 它并没有真正说明您计划如何将其存储在 Redis 中。如果没有有关查询的更多详细信息,我将按如下方式存储数据:

  1. 将应用详细信息存储在哈希中(例如 app:<id> )
  2. 将应用程序 ID 存储在 Set 中的每个状态中(例如 apps:<state> )
  3. 将批准/拒绝的申请存储在两个排序集中,id 为成员,日期为分数

Also if someone queries for all applications in california for a certain date, I will be able to pull application ids in one call but to get details for each application, do I need to make another request?

同样,这取决于数据模型,但您可以使用 Lua 脚本嵌入此逻辑并在对数据库的一次调用中执行它。

关于redis - 使用 Redis 的应用程序的数据模型设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29620042/

相关文章:

java - Spring Data Redis(1.3.2.RELEASE)是否支持jedis的JedisSentinelPool?

haskell - 处理函数式编程中增量数据建模的变化

python - 如何计算 Google App Engine 中多对多关系的双方

sql - 1 对多关系限制 1 对 3 的数据库设计效率

Hadoop/Cassandra - 如何存储和分析来自数千个传感器的数据?

java - 如何在 Spring Data Redis Reactive 中使用事务?

azure - 如何通过ARM模板输出返回Redis的primaryKey?

sql - 数据库设计 - NULL 外键

javascript - node.js zadd 参数中的 redis

redis keys命令删除数据但scan命令不