Big Endian字节与字符串作为字符串 - 字符串数据库中的键

时间:2012-01-11 13:59:27

标签: c++ c database-design endianness berkeley-db

我还没有看到将整数转换为网络顺序并将结果字节写入字符串中的可索引实体的常识概念 - 字符串数据库与在此类文档中的任何位置写入数字的字符串表示形式数据库。

当然,将64位int作为字符串写入数据库的大小开销必须超过在将字节写回整数类型之前必须进行ntohl调用的微不足道的复杂性。

因此我在这里遗漏了一些东西,在字符串字符串数据库中使用big-endian字节和字符串作为可索引实体的缺点是什么?

(C ++ / C标签,因为我在谈论将字节写入程序类型的内存位置,BDB,因为我正在使用的数据库,也可能是kyotodb)。

2 个答案:

答案 0 :(得分:2)

如果数据库验证您发送的字符串数据在预期编码中有效,那么您不能只为其提供所需的任何数据。您只能发送看起来像有效编码的整数。我不知道BDB或kyotodb是否做了这样的验证。

在我看来,像是一个黑客试图欺骗一种数据类型来保存其他东西,然后依靠客户端都知道这个技巧。当然,无论您是使用字符串来保存整数的ascii-decimal表示,还是使用字符串作为原始内存缓冲区来保存整数,这都适用。在我看来,最好使用一个实际上包含你想要保存的类型的数据库,而不仅仅是字符串。

答案 1 :(得分:2)

在这种情况下,big-endian的优点是字符串可以按升序正确排序。

如果数据库体系结构无法本机存储64位整数,但无论如何都需要存储它们,以这种方式对它们进行字符串化是一种方法。

当然,如果您稍后将数据库升级为可以本地存储64位整数的数据库,您将要么“卡住”实现,要么必须经历迁移过程。