大数据处理方法的最佳设计模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据处理方法的最佳设计模式相关的知识,希望对你有一定的参考价值。

我有一个应用程序,我正在重构并试图遵循一些“清洁代码”原则。我有一个应用程序,它从多个不同的数据源读取数据并操作/格式化该数据并将其插入另一个数据库。我有一个数据层,其中包含每个数据源的相关DTO,存储库,接口和帮助程序,以及具有匹配实体,存储库和接口的业务层。

我的问题归结为导入方法。我基本上有一个方法系统地调用每个业务逻辑方法来读取,处理和保存数据。需要进行大量调用,即使Import方法本身根本不操作数据,该方法仍然非常大。有没有更好的方法来处理这些数据?

ICustomer<Customer> sourceCustomerList = new CustomerRepository();
foreach (Customer customer in sourceCustomerList.GetAllCustomers())
{

   // Read Some Data
   DataObject object1 = iSourceDataType1.GetDataByCustomerID(customer.ID)
   // Format and save the Data
   iTargetDataType1.InsertDataType1(object1)

   // Read Some Data

   // Format the Data

   // Save the Data

   //...Rinse and repeat
}
答案

你应该看看Task Parallel Library (TPL)Dataflow

ICustomer<Customer> sourceCustomerList = new CustomerRepository();

var customersBuffer = new BufferBlock<Customer>();
var transformBlock = new TransformBlock<Customer, DataObject>(
    customer => iSourceDataType1.GetDataByCustomerID(customer.ID)
);

// Build your block with TransformBlock, ActionBlock, many more... 
customersBuffer.LinkTo(transformBlock);

// Add all the blocks you need here....

// Then feed the first block or use a custom source
foreach (var c in sourceCustomerList.GetAllCustomers())
    customersBuffer.Post(c)
customersBuffer.Complete();
另一答案

您的性能将受IO限制,尤其是在每次迭代中对数据库的许多访问时。因此,您需要修改架构以最小化IO。

是否可以将所有记录移动到一起(可能在临时数据库中)作为第一遍,然后在读取它们并将它们保存在需要的位置之前,在数据库中进行记录匹配和格式化作为第二遍。

(作为旁注,有时我们会被DDD和OO带走,其中所有“需要”成为一个对象。但这并不总是最好的方法。)

以上是关于大数据处理方法的最佳设计模式的主要内容,如果未能解决你的问题,请参考以下文章

准备与大数据相关的设计和架构问题的最佳方法[关闭]

在一些片段之间填充对象变量的最佳方法

第六章.解决大问题

在 C# 代码中解析(大)XML 的最佳方法是啥?

JS最佳实践

METAL顶点/片段着色器“拦截”结果的最佳方法