概述
EntityStore 作为 UModel 系统的数据存储引擎,具有一定的容量和性能限制。了解这些限制对于合理使用 EntityStore、避免性能问题和数据丢失至关重要。
应用案例
当前应用案例相关素材,请参考:umodel.zip
容量限制
EntityStore 的容量限制直接影响数据存储规模,超出限制时系统会采用相应的处理策略。
限制项目 | 上限值 | 超出行为 | 是否可调整 | 使用建议 |
实体总数 | 100万 | 无法新增实体 | 暂不支持 | 设计合理的 EntitySet,避免单一类型实体过多,如果实体变化频繁,可以考虑使用动态实体或不建模成实体。 |
边总数 | 1000万 | 无法新增边 | 暂不支持 | 合理设计关系结构,避免冗余边,如果关系变化频繁,可以考虑使用动态关系或不建模成关系。 |
单一类型实体总数 | 10万 | 无法新增实体 | 暂不支持 | 控制单一类型实体数量,避免单一类型实体过多。 |
单一类型边总数 | 100万 | 无法新增实体 | 暂不支持 | 避免创建过多同类型关系 |
单一实体大小 | 64KB | 自动截断处理 | 暂不支持 | 避免存储大文本数据(如 Markdown、HTML) |
性能限制
EntityStore 的性能限制影响数据读写的吞吐量和响应时间。
限制项目 | 限制值 | 超出行为 | 是否可调整 | 使用建议 |
写入QPS | 1万QPS | Best Effort 处理,超出后实体索引构建延迟,影响查询实时性 | 否 | 建议增量写入,定期写入周期不低于10分钟 |
查询并发 | 10并发 | 返回查询失败 | 否 | 缩小查询时间区间、使用精确的过滤条件和 Limit 参数;EntityStore 作为元数据系统,不建议用于支持告警等高频查询场景 |
实体查询扫描上限 | 100万条 | 扫描终止,按照当前扫描的结果计算,返回 PartialSuccess | 否 | 尽量使用 Limit 限制输出数量 |
实体查询输出上限 | 10万条 | 只返回前10万条,同时返回 PartialSuccess | 否 | 尽量使用 Limit 限制输出数量 |
关系查询扫描上限 | 100万条 | 扫描终止,按照当前扫描的结果计算,返回 PartialSuccess | 否 | 尽量使用 Limit 限制输出数量 |
关系查询输出上限 | 1万条 | 只返回前1万条,同时返回 PartialSuccess | 否 | 尽量使用 Limit 限制输出数量 |
查询输出带宽 | 约20M/s | Best Effort 处理 | 否 | 避免大量数据传输,不建议用于数据导出 |
最佳实践建议
容量管理
监控容量使用:定期检查实体和边的数量,提前预警。
数据清理策略:建立定期清理历史数据的机制。
分类设计:合理设计实体类型,避免单一类型过多。
性能优化
批量操作:尽量使用批量写入,减少请求频率。
分散请求:避免在整点等时间集中发送请求。
查询优化:使用合适的过滤条件和Limit参数。
增量更新:采用增量写入方式,避免全量更新。
错误处理
限制监控:监控容量和性能限制的触发情况。
降级策略:设计服务降级方案,应对限制触发。
数据备份:重要数据需要在其他存储系统中备份。
常见问题
Q: 如何提升查询QPS?
A: 可以通过缓存查询结果、减少查询频率、缩小查询时间区间、使用精确的过滤条件和Limit参数。
Q: 实体大小限制包括哪些数据?
A: 包括实体的所有字段数据,如属性值、元数据等的总和。不包括关系数据。