Big Endian字节与字符串作为字符串数据库中的键
Big Endian bytes vs. Strings as keys in string - string databases
我还没有看到将整数转换为网络顺序并将结果字节写入字符串数据库中的可索引实体的常识,而不是在此类数据库的文档中的任何位置写入数字的字符串表示。
毫无疑问,将64位int作为字符串写入数据库的大小开销必须超过在将字节写回整数类型之前必须执行ntohl
调用的琐碎复杂性。
因此,我在这里缺少了一些东西,在字符串数据库中使用大端字节与字符串作为可索引实体的缺点是什么?
(当我谈论将字节写入程序类型的内存位置时,C++/C标记,BDB,因为这是我正在使用的数据库,也可能是kyotodb)。
在这种情况下,big-endian的优点是字符串可以按升序正确排序。
如果数据库体系结构不能以本机方式存储64位整数,但无论如何都需要存储它们,那么以这种方式对它们进行字符串化就是一种方法
当然,如果以后将数据库升级为可以本地存储64位整数的数据库,那么您要么会被实现"卡住",要么必须经历迁移过程。
如果数据库验证您发送的字符串数据在预期编码中是有效的,那么您不能只给它任何您想要的数据。您只能发送看起来像有效编码的整数。我不知道是BDB还是京都银行做这样的验证。
此外,在我看来,这就像是一种黑客攻击,试图欺骗一种数据类型来保存另一种数据,然后依靠客户来了解诀窍。当然,无论您是使用字符串来保存整数的ascii十进制表示,还是使用字符串作为原始内存缓冲区来保存整数,这都适用。在我看来,最好使用一个数据库来实际保存您想要保存的类型,而不仅仅是字符串。