[讨论] 存取即时资料用档案 or 数据库,哪个好?

楼主: freeman371 (自由人371)   2021-02-26 21:46:17
假设:
我有一个即时通讯网站(聊天室程式)
其中程式里头有一部分需要记录多位使用者现在的即时状态
目前我的做法是用档案的方式来存取这些状态值
也许随便取个档名像是“temp_PHPSESSID_mklr2qbq3k1l6ajiqlh76f8qm4”这样的暂存纪录档
里头内容可能就是一些简单的值,例如“2,3,0,0,0”这类的,而“0”、“2”、“3”就是使用者的某些状态代表值
这些temp档案随时都会被频繁更动
而且于多名使用者同时上线时,这些人将同时存取同一档案
虽然用“档案I/O”来实现记录使用者即时状态很直观、而且程式也好写
但是听说“若有多人同时操作及更动档案时,档案更动后的资料很可能会不如预期”
(亦即,同一档案是不能由多人同时间存取的)
而且比起数据库存取,档案存取的效率较差、速度也较慢
也没办法像Database一样可以灵活的操纵资料
然而,也听说 Database的底层仍是以档案模式存取 & 操作
只是在资料的处理算法上做了许多最佳化,处理资料的速度也比直接手刻程式处里File里的资料还来得快
那么,为了怕上述的问题发生
我在犹豫是否应该把现在所有跟记录即时状态值有关的存取方式 从“档案”全部改成用“数据库”来存取?
不过这些即时状态资料顶多也只是几个零星简单的数值而已
有时我也在想:
真的有必要为了加快“理论上”记录、修改及存取的速度,以及提升存取效能
就要动用到数据库来存取这些小值吗?
比起档案存取,感觉用像是mysqli之类的函数频繁地存取这些小而简易的状态值有如“用大砲打小鸟”
似乎没什么必要,而且感觉效能也不会有所变好(甚至可能变得更差也说不定…)
因为数据库的根本不也是用档案来存取资料的吗?
那为什么就不干脆用档案存取就好了?
用数据库就真的有比较快、比较有效率吗?
所以各位对于“存取这种小量简单但可能会有多人同时存取相同即时状态值应该用什么方式存取”有什么看法?
除了用File、Database外,还有其他更好的存取方式吗?
我目前全是用像file_get_contents、file_exists、file_put_contents、fopen等类的函数来操作使用者即时状态值的档案
要全改成另一种方式,光改写程式大概就是个大工程了吧…
作者: p2k (pank)   2021-02-26 23:14:00
redis
作者: wayway2004 (暐暐)   2021-02-27 00:30:00
redis or memcache
作者: MOONRAKER (㊣牛鹤鳗毛人)   2021-02-27 00:49:00
你想太多了 think too much
作者: ddoll288 (风儿卿卿)   2021-02-27 03:00:00
恭喜你重新造了一个数据库的轮子,有考虑file lock问题?用数据库或queue会不会让人生更美好?
作者: imhaha (嘿嘿)   2021-03-03 21:52:00
数据库的存在不就是用来资料处理
作者: pandajohn (猫熊酱)   2021-03-17 03:56:00
数据库也算大砲?

Links booklink

Contact Us: admin [ a t ] ucptt.com