考虑N个数据源,每个数据源都有一个事件流

Event{
    long id;
    Object data;
}


一个流中的某些事件可能具有相同的ID,因为事件可能跨越更新,新建等事件。因此,我们可以看到以下两个流:

<1, 2, 3, 1, 5, 2>
<3, 3, 4, 5, 4>


我现在想将这些合并为一个流每个订单ID肯定是唯一的。

最简单的方法是使用String而不是long并附加源编号,生成如下内容:

<"1 - 1", "1 - 2", "1 - 3", "2-3", "2-3" ... >


是否有更多的内存协同方式/更好的方式?

最佳答案

您的String解决方案很好,实际上很常见。如果您有兴趣使其更紧凑,则可能需要使用整数元组。

分布式系统中使用的另一种常见方法是使用范围分配:拥有一个中央(单例)服务器来分配范围,每个客户端都可以在其中命名其ID。这样的服务器可以为客户端1分配范围0-99,为客户端2分配范围100-199,等等。当客户端用尽分配的范围时,它将再次与服务器联系以分配新的范围。

10-08 09:04
查看更多