如何从两个不同来源进行相同的10000条记录



我有两个不同的应用程序,它们在两台不同的机器上运行。

  • 应用程序A从来源A。
  • 接收数据
  • 应用程序B正在接收来自来源b。
  • 的数据

从技术上讲,Source ASource B应该提供相同的数据。来源A和B不受我们控制,因为它由其他一些团队管理。

现在,我想在这两个应用程序中访问来自源A和B的记录。如果我正在从Source A取样10000个记录,那么我也想从Source B品尝相同的10000条记录。我正在使用来自两个来源的userId来采样记录。因此,考虑到userId,我需要添加一些逻辑,可以通过这些逻辑进行采样10000个记录。然后,我将在我的两个应用程序中使用相同的逻辑,从源A和B。

获得相同的10000个采样记录

我们从两个来源获得了一堆userId's,并且没有特定的模式,我不知道我在特定的时间内可以得到多少用户ID,但肯定会超过10000。我们一天中有几百万个用户形式。

我应该使用什么算法和逻辑,以便我可以采样10000记录。我想在两个应用程序中使用相同的逻辑。.有什么方法可以做到吗?我在考虑在这里使用模量吗?在我的两个应用程序中,我都有以下代码完全相同的,因此我也将在我的两个应用程序中都使用相同的逻辑。

  public void writeToDatabase(final Holder holder) {
    String userId = holder.getUserId();
    // how to make sure that we are storing only 10000 user data in database
    // and it should be same user data from both the system.
    // I was thinking of using hashCode as below but I don't think so it is
    // right way to use it
    if (userId.hashCode() < 10000) {
        // write to database        
    }
  }

从两个来源(A和B(中存储相同的数据后,我需要在这两个来源之间进行一些数据质量比较。基本上,我将从源A与源b。

比较相同的10000 userId

您似乎有两个问题:1。如何采样10,000个记录;2.如何从源A和b。

  1. 如果您是从知道记录数量的文件中进行采样(我们称其为 N(,则基本上,您可以用概率10000/N对每个记录进行采样。如果您不知道有多少记录(例如,数据可能来自流(,则可以应用储层抽样。基本上,您将记忆中的10,000个记录和每个新记录(例如"记录"(保存下来,您决定使用概率10000/i保持它,如果是的,则您可以从储层中以概率为单位1/10000。最终结果是,无论i的最终数字如何,每个记录都会用概率10000/i进行采样。

  2. 无论您使用哪种方法(使用已知或未知的总计采样(,您可以通过将随机数生成器设置为具有相同种子的两个应用程序中相同的结果。在Java中,只需使用Random generator = new Random(1)

最新更新