我处于某种 DWH 项目中(不完全是,但仍然如此)。我们经常遇到这个问题,我想知道是否会有更好的解决方案。关注
我们收到一些包含用户所有状态记录的大文件,例如:
UID | State | Date
1 | Active | 20120518
2 | Inactive | 20120517
1 | Inactive | 20120517
...
我们通常只对每个用户的最新状态感兴趣。到目前为止一切顺利,只需进行一点排序,我们就可以得到我们想要的方式。唯一的问题是,这些文件通常很大.. 像 20-60gb,排序这些家伙有时很痛苦,因为排序的逻辑通常不是那么简单。
我们通常所做的是将所有内容加载到我们的 Oracle 中,并使用中间表和物化视图来完成。尽管如此,有时性能会咬我们。
20-60GB可能很大,但不是那么大。我的意思是,应该是一种更专业的方式来处理这些记录,不是吗?
我想有两种基本的方法来解决这个问题:
1) 在 DBMS、脚本和编译的东西之外编程。但也许这不是很灵活,除非投入更多的时间来开发一些东西。另外,我可能不得不忙于自己管理盒子资源,而我不想为此担心。
2)将所有内容加载到DBMS(在我的例子中是Oracle)并使用它提供的任何工具对数据进行排序和剪辑。不过,这就是我的情况,我不确定我们是否使用了所有工具,或者只是以适合 Oracle 10g 的正确方式进行操作。
那么问题是:
您有一个 60gb 的文件,其中包含数百万条历史记录,例如上面的记录,您的用户希望在 DB 中有一个表,其中包含每个用户的最后状态。
你们会怎么做?
谢谢!