用于在程序迭代之间保持数据的临时存储?

时间:2010-12-09 15:01:59

标签: data-storage data-processing

我正在开发一个像这样工作的应用程序:

  1. 从多个来源获取数据,产生约500,000-1,500,000条记录的池(取决于时间/日)
  2. 解析数据
  3. 处理部分数据的方式是将其与预先存在的数据(从数据库中读取)进行比较,进行计算并存储在数据库中。但是,必须存储在数据库中的结果数据集的大小要小得多(与原始数据集相比),范围为5,000-50,000条记录。此过程几乎总是更新现有数据,可能会添加更多记录。
  4. 然后,应该以某种方式保留步骤2中的数据,以便下次获取数据时,有一个数据集可用于执行计算,而不会触及数据库中的预先存在的数据。我应该指出,这些数据可以丢失,它不是不可替代的(如果需要,可以从数据库中读取关键信息),但下次会加快这个过程。
  5. 应用程序组件可以(并且将会)在不同的计算机上运行(在同一网络中),因此必须可以从多个主机访问存储。

    我考虑过使用memcached,但我不太确定我应该这样做,因为一条记录通常不小于200字节,如果我有1,500,000条记录,我猜它会超过300 MB memcached缓存...但这对我来说似乎不具备可扩展性 - 如果数据量是这个数量的5倍呢?如果它只消耗1-2 GB的缓存来保持迭代之间的数据(很容易发生)?

    那么,问题是:哪种临时存储机制最适合这种处理?我没有考虑使用mysql临时表,因为我不确定它们是否可以在会话之间持续存在,并且可以被网络中的其他主机使用...还有其他建议吗?我应该考虑什么?

1 个答案:

答案 0 :(得分:1)

我知道这听起来非常老派,但SAN上的临时文件很容易且便宜。

与每次使用300M的缓存相比,在每次运行开始时加载300M文件是微不足道的。

如果你可以从数据库密钥中重新创建它,那么编写和测试该部分并使其自动化是明智的,如果临时文件不可用,则将从密钥中挖掘信息并重新创建。