我目前正在调查使用MapReduce维护SQL Server中的增量视图构建的可能性。
基本上,使用MapReduce创建物化视图。
我有点卡住了。考虑如何划分我的map
输出。现在,我并没有真正的BigData情况,大约50 GB是最大的,但我有很多复杂性和各种隐含的性能问题。我想看看我的MapReduce / NoSQL方法是否可能成功。
关于MapReduce的事情我目前遇到的问题是分区。由于我使用SQL Server作为数据源,因此数据局部性并不是我的问题,因此我不需要在整个地方发送数据,而是每个工作者都应该能够检索数据的分区基于map
定义。
我打算通过使用LINQ来完全映射数据,也许就像实体框架一样,只是为了提供一个熟悉的界面,这在某种程度上除了这一点,但它是我正在探索的当前路线。
现在,我该如何拆分数据?我有一个主键,我在表达式树(ASTs,如果你不熟悉LINQ)方面有map
和reduce
定义。
首先,我如何设计一种方法来分割整个输入并对初始问题进行分区(我认为我应该能够利用SQL Server中的窗口聚合,例如ROW_NUMBER
和TILE
)。
其次,更重要的是,我如何确保逐步增加?也就是说,如果我添加或更改原始问题,我该如何有效地确保最小化需要进行的重新计算量?
我一直在寻找CouchDB的灵感,他们似乎有办法做到这一点,但我如何利用SQL Server利用其中的一些好处?
答案 0 :(得分:1)
我面对类似的事情。我认为你应该忘记窗口函数,因为它会使你的进程序列化。换句话说,所有工人都在等待查询。
我们测试过的并且“工作”是将数据分成更多的表(每个月都有x表)并在这些分区上运行单独的分析线程。在Reduce之后标记已处理/未处理/可能不良/等数据。
将一个分区表测试作为锁定升级问题..
您肯定会为当前的解决方案增加一点复杂性。