作者freeman371 (自由人371)
看板PHP
标题[讨论] 存取即时资料用档案 or 资料库,哪个好?
时间Fri Feb 26 21:46:17 2021
假设:
我有一个即时通讯网站(聊天室程式)
其中程式里头有一部分需要记录多位使用者现在的即时状态
目前我的做法是用档案的方式来存取这些状态值
也许随便取个档名像是「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等类的函数来操作使用者即时状态值的档案
要全改成另一种方式,光改写程式大概就是个大工程了吧…
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.161.143.244 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1614347179.A.668.html
1F:推 p2k: redis 02/26 23:14
2F:→ wayway2004: redis or memcache 02/27 00:30
3F:→ MOONRAKER: 你想太多了 think too much 02/27 00:49
4F:推 ddoll288: 恭喜你重新造了一个资料库的轮子,有考虑file lock问题? 02/27 03:00
5F:→ ddoll288: 用资料库或queue会不会让人生更美好? 02/27 03:01
6F:→ imhaha: 资料库的存在不就是用来资料处理 03/03 21:52
7F:推 pandajohn: 资料库也算大炮? 03/17 03:56