我看到人们使用date或getTime存储/获取相对于它的服务器时间和时间,这可以作为一系列字符串保存在数据库中:“July 21,1983 01:15:00”。
到目前为止,我将服务器时间存储为NOW和2013年1月1日之间的差异。这将返回一个数字值(以分钟为单位),在2013年1月1日到现在之间向下舍入,我将其作为内部服务器时间保留。
这样做的好处是: - 查询服务器意味着一个简单的数字比较操作,同时(我做了一个有根据的猜测)比较暗示内部转换到对象和使用胖比较操作的两个日期。 - 存储大小的数量比大约25个字符的字符串更轻。 - 转换回“实际”时间是通过添加1月1日,但由于初始圆度,第二和毫秒值将丢失。
但是,其他程序员仍坚持使用字符串版本 - 作为一个人很容易阅读。 - 它是大多数语言的通用格式(特别是此项目有的nodejs,mongodb和as3)。
我不确定哪个更适合大型数据库,特别是基于多人套接字的游戏。我相信其他有实际经验的人可以解释我的问题。
哪个更好,为什么?
答案 0 :(得分:1)
将它们存储为Mongo Date对象。 Mongo将日期存储为8字节的第二偏移整数[1],并以人类可读的格式显示它们。你不是要存储25个字符!
因此,所有比较都同样快。除了查询时,没有字符串解析,这是每个查询的一次性操作。
您的差异存储为4字节的int。因此,与普通的MongoDB日期存储相比,您只需保存4个字节。考虑到你的mongo对象的平均大小,这是一个非常小的节省。
考虑“自2013年1月以来的偏移”方法的所有缺点:
基本上,更多的代码,更多的头痛和更多的时间花费,所有在数据库中的对象上保存4个字节,通过将字段从“updated”重命名为“upd”可以保存相同的4个字节?我认为这不是一个明智的权衡。
另外, Best way to store date/time in mongodb
过早优化是万恶之源。除非你已经确定某些问题,否则不要进行优化。