是否存在数据库,缓存层合一的解决方案?

2022-08-07 14:23:47 +08:00
 b00tyhunt3r

楼主背景游戏服务器开发, 一直以来沿用的是老一套 DB + redis/memcache 的形式来做存储。虽然方案比较稳定了,但是在扩容和复杂度上一直感觉不是那么直观。 看到过有一些公司直接舍弃 DB 层,只用一个 redis 定时持久化做存储, 但感觉小规模的项目还行,数据量上去了对内存要求会不会过大呢? 也见过有人舍弃缓存层只用 Postgres 来存储,据说百万级并发请求性能只比 redis 慢 1 倍?

另外问一下 MongoDB 算不算是一个 DB/Cache 合一的解决方案呢?就是我项目里只用一个 MongoDB ,MySQL/Postgre/redis 之流通通不要

请大佬现身说法!!!

5133 次点击
所在节点    程序员
36 条回复
youngce
2022-08-07 14:34:21 +08:00
建议先搞清楚缓存和数据库用途的区别。。。
b00tyhunt3r
2022-08-07 14:58:47 +08:00
期待真大佬干货回答!!
xsen
2022-08-07 16:19:29 +08:00
若是针对扩容与复杂度的话,建议了解下分布式数据库,如国内的 TiDB 之类的

当然,你游戏场景的这不算太复杂;分布式数据库之所以提出来,是因为基于传统的 SQL 数据库,在数据量海量情况下,要做在线或离线数据分析所以额外的大数据分析之类方案结合进来,会导致异常复杂
b00tyhunt3r
2022-08-07 16:35:24 +08:00
@xsen
感觉有点杀鸡牛刀了吧。。。确实如你所说,游戏场景并不复杂,但是对性能要求却极高,这也是大部分时候我需要把数据存在内存的原因,
但是内存数据落地后的处理就有不一致的风险,
所以我现在思考的是能否去掉缓存 /DB 其中一端,来消除不一致性的一个成因,并减少开发复杂度?
我听说 PostgreSQL 自带 Cache 功能,如果使用 DB 自带的 Cache 层,那还需要引入 Redis 等外部软件吗?
mrsatangel
2022-08-07 17:24:14 +08:00
- DB 的 cache 对外保持 ACID 的语义,Redis 压根就不是事务型数据库;
- DB 的 cache 是 page 维度的,Redis 作为 cache 的数据是 key 维度的;

去掉缓存:损失性能;
去掉 DB:损失 durability 。但是也不能不能解,比如前段时间太监了的 optane 这种;

Redis 的扩展性问题:老东家见过很多九百多 GB 的 redis 实例;实在不行还可以按 key 分片啊。
geekvcn
2022-08-07 17:39:58 +08:00
对内存容量要求未来应该可以不用太焦虑了,钱够就趁着 Intel 傲腾停产前多存点货,或者等 CXL 生态成熟,内存容量以后都不是事。以后数据库应该会围绕 CXL 生态开发,以后内存会分为 CPU 封装的高速 HMB 内存,CPU 扩展的 DDR 内存,CXL 扩展大容量共享内存池
ryalu
2022-08-07 18:33:33 +08:00
aws 推出的 [memoryDB]( https://aws.amazon.com/cn/blogs/china/comparison-of-amazon-memorydb-and-amazon-elasticache/) 会不会成为未来的一种趋势
wctml
2022-08-07 18:50:20 +08:00
Lighfer
2022-08-07 21:20:32 +08:00
apache ignite ?
killpanda
2022-08-07 21:27:52 +08:00
couchabase
killpanda
2022-08-07 21:27:58 +08:00
couchbase
roundgis
2022-08-07 21:32:12 +08:00
現在單機都可以支持 1T ram

大部分的場景也夠用了吧
noparking188
2022-08-07 21:51:46 +08:00
之前看的 V 站一个老哥回帖说,他们公司 MySQL 内存给几十上百 TB ,缓存开到最大,基本上数据都在内存里了

楼主你的场景和痛点没详细描述,不大好给你建议
mxT52CRuqR6o5
2022-08-07 21:53:32 +08:00
游戏的局内信息一般都不持久化的吧,局外信息也没有多高的性能需求啊
nicebird
2022-08-07 22:01:22 +08:00
tcaplusDB
joesonw
2022-08-07 22:23:46 +08:00
redis 有落盘的,可以按 key hash 做分布式,特别适合游戏场景,公司里有用到 2 个多 T 的。一般玩家的相关数据都是按玩家 id hash 。
linoder
2022-08-07 22:56:45 +08:00
tidb
fkdtz
2022-08-08 00:20:07 +08:00
本质上来说还是 AP 和 CP 的取舍问题,没有办法既要高性能高可用,又要很强的一致性,只能根据业务场景来搭配使用。
iwdmb
2022-08-08 00:52:09 +08:00
Cassandra
akira
2022-08-08 02:04:20 +08:00
你一个游戏能有多少人 多少数据哦。。只看数据规模的话,redis 肯定是完全足够了的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/871230

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX