Golang 的 Map 可不可以存大量的数据?比如说几个 GB 的数据

323 天前
 dw2693734d

因为 map 是 O(1)的,我想用来当 key value 数据库,快速查询一些数据。

这样会不会有什么隐患问题?

6407 次点击
所在节点    Go 编程语言
70 条回复
zhaokun
323 天前
服务器宕机数据丢失!为啥不用 redis ,有备份机制
dw2693734d
323 天前
@zhaokun 宕机无所谓,我对这个没要求,只要查的快就行
seers
323 天前
我怎么感觉这么大个对象你没写好优化直接 gc 掉了咋办
wzw
323 天前
可以的,单机的时候,比 redis 性能好太多了。 我用 goframe 的 gmap
prenwang
323 天前
freecache 或者 bigcache , 不担心 GC , 简单实用
hhjswf
323 天前
内存够大吗
matrix1010
323 天前
几个 G 没什么压力,可能 GC 的时候会占些系统资源但是你都这样用了我估计机器配置不错,问题不大。而且数据库我理解不用考虑数据驱逐问题,所以也不需要 sync pool 之类的针对 alloc 的优化。另外 freecache 和 bigcache 都是缓存和数据库还是有一定区别的,而且没有范型
opengps
323 天前
没什么问题,甚至在高可用硬件的配合下几乎可以拿内存当硬盘用,只是风险永远都在,持久化的备份设计一定要有
mdn
323 天前
内存够大的话没问题,不过建议使用 LRU cache 做优化
dw2693734d
323 天前
@hhjswf 64g 的
dw2693734d
323 天前
应该够用
elechi
323 天前
用个内存 KV 数据库也行
dayeye2006199
323 天前
不在乎持久化和拓展性的话(比如数据量放大 10 倍),为什么不呢?
ljt1096
323 天前
你大概是想在内存里做个缓存吧,Map 里虽然可以放几个 G 的数据,但是不太推荐这么写,比如你缓存什么时候失效,替换算法,还有和数据库之间的一致性什么的,自己手动实现什么的太麻烦了,建议看看有没有什么合适的库或者组件拿过来直接用。当然只是自己写着玩玩就随意了。
documentzhangx66
323 天前
那些觉得语言内置 map 性能比 Redis 好的朋友,你们猜猜为啥大家要选择 Redis 、Mysql 甚至 Oracle 。
ryd994
323 天前
你这样用的话,可能碰到 corner case 就歇菜了
如果用 memcached 等设计就是为了 cache 的软件 /库的话,它们一般有可以限制缓存时间和大小的个参数,可以避免意外挤爆内存
ccde8259
323 天前
用 bigcache ,前人总是踩过一些坑才做了这些工作。主要有这几个优势:
1. Zero GC 如果 map 有上万对象 GC 起来要命,通过 cacheShard 里 ringBuffer 避免 GC 扫对象
2. FIFO 过期策略,省的处理淘汰跟溢出的问题
3. 并发安全,给上分片读写锁
ns09005264
323 天前
@documentzhangx66 #15 为啥,可以简单讲讲吗
Ericcccccccc
323 天前
没问题, 主要考虑几点:

1. 多个机器数据怎么保持同步, 或者说有不一致会不会有什么问题
2. 数据怎么推送更新到全部机器上, 依然需要考虑不同机器之前出现差异的问题.
3. 机器如果重启怎么加载?
x77
323 天前
这个需求不就是 HIVE 数据库么

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

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

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

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

© 2021 V2EX