【发布时间】:2018-11-20 22:37:03
【问题描述】:
将 java 对象编码为可以解码为该对象的确定性标识符的最佳方法是什么?
基本上,我想在我们的响应中将此上游发送给客户,以便他们可以报告有关此标识符的指标。所以这个标识符必须是确定性的。我研究了 JSON 序列化 -> GZIP 压缩 -> base64 字符串。但是,我担心json对象中的字段不会总是保持相同的顺序,从而导致每次都有不同的字节集。有没有办法保留这个结构顺序?如果没有,有更好的方法吗?
另一个相关问题是是否有一种方法可以生成字符数最少的字符串,因为我们对生成的标识符有严格的空间要求。
【问题讨论】:
-
当然。只需让数据库为您生成一个 ID,或使用 UUID,并将该 ID 和您的对象的状态存储在数据库中。当您需要从 ID 中取回对象时,请从数据库中获取它。看到这个页面的 URL 中的 53402638 了吗?这是您问题的ID。整个问题不存储在此 ID 中。它只是用来获取数据库中的问题。
-
对不起,我应该说得更好。它不会用于数据库,认为这是我需要确定性的一个很好的例子。它用于 BI 团队在我们公司中使用的指标报告目的。所以持久性在我们这边并不是真正的最佳选择,特别是因为这个对象中的东西组合可能会导致我们不想维护的无限增长的表。
-
这与在日志中维护序列化的完整对象有何不同? (除了通过丢弃所有早于某个日期的记录来清理数据库更容易)。
-
您希望使用任何其他名称进行序列化。之后你对结果做什么:压缩、编码等是无关紧要的。您的关键问题是序列化以及它如何满足您的要求
标签: java json encoding base64 gzip