在沙发床中插入新记录时仅保留n条记录

问题描述 投票:1回答:1

我有一个巨大的存储桶,其中包含所有用户的通知数据。像这样:

┌────┬─────────┬─────────────────────────┐
│ id │ user_id │          data           │
├────┼─────────┼─────────────────────────┤
│  1 │       1 │ {"somekey":"someValue"} │
│  2 │       2 │ {"somekey":"someValue"} │
│  3 │       1 │ {"somekey":"someValue"} │
│  4 │       1 │ {"somekey":"someValue"} │
│  5 │       1 │ {"somekey":"someValue"} │
│  6 │       2 │ {"somekey":"someValue"} │
│  7 │       2 │ {"somekey":"someValue"} │
│  8 │       1 │ {"somekey":"someValue"} │
│  9 │       2 │ {"somekey":"someValue"} │
│ 10 │       2 │ {"somekey":"someValue"} │
└────┴─────────┴─────────────────────────┘

因此,无论何时我想插入新记录,例如user_id=2,我都想删除user_id=2的最早记录,以使每个用户只有N条记录(当然,如果记录总数较少比N,将不会删除)

node.js couchbase couchbase-nodejs-sdk
1个回答
0
投票
可能会有更好的数据建模方法。所有这些数据都需要放在单独的文档中吗?如果“ N”相对较小,则可以将所有这些都放入单个文档中的数组中。喜欢:

{ "type": "user", "name": "ehsan", "notifications" : [ {"somekey":"someValue"}, {"somekey":"someValue"}, {"somekey":"someValue"} ] }

然后,该过程将是:

    获取文档
  1. 向记录数组添加记录
  2. 确定是否需要删除旧记录(然后将其删除)
  3. 保存更新的文档。
  • 此方法的优点是简单,不需要更新多个数据。建模的方式[[可能有效,但是您需要ACID事务(Couchbase的Node SDK中尚不可用)或Eventing函数来检查以确保没有太多的通知文档每当创建新通知时为每个用户。
  • © www.soinside.com 2019 - 2024. All rights reserved.