我很抱歉这个冗长的解释,但我确实觉得有必要解释一下细节,以便我能够以最好的方式获得帮助,以创建正确的核心数据模型来满足我的要求。
我只是想找出创建数据模型的最佳方法,以便我能够以快速有效的方式实现以下目标,而目前我的MySQL设置目前无法实现。我使用MySQL从服务器返回所有值,但现在希望使用CoreData来缓存这些数据,并且只下载新的日期数据。
我有一个存储数据集的数据库:
{
"Agent_Id" = 32;
"Order_FinalisedDate" = "2014-05-17 03:39:54";
"Order_Id" = 2596;
"Order_ReferenceNumber" = "Pavan/0905/016";
"PieChart_Id" = 13585;
"PieChart_QuantityATOP" = 150;
"PieChart_TotalAmount" = 52500;
"Product_Id" = 20;
}
每次加载viewController时,我都有13,585个这些数据集从服务器中传入。处理从服务器检索的数据需要1分半钟。这是非常低效的,我寻求创建一个核心数据模型,以帮助我按时大幅减少流程。
这是没有核心数据的当前流程
我只关注过去12个月,就像过去12个月银行如何退回您的账户一样。因此,我以JSON格式从服务器获取一个实时动态数组,将它们很好地复制到名为BankDateDataModel
的数组中的自定义monthsChartDataDictionary
数据模型中,该数组以此格式yyyy-MM
存储数据。
然后,我会检查所有销售情况并抓取并对其进行分类,如果它的日期可以与monthsChartDataDictionary
数组中的匹配日期相关联。
//Go through each data set
for(id key in JSONDictionary){
//First lets store each data set which we will use for another process.
PieChartSliceDataModel *pcs = [[PieChartSliceDataModel alloc] initWithJSONData:key];
[allPieChartDataArray addObject:pcs];
/**
Check to see if we have a date entry in the format of `yyyy-MM`
If there is a
*/
if([monthsChartDataDictionary objectForKey:pcs.PCS_StringOrderFinalisedDate]){
[[monthsChartDataDictionary objectForKey:pcs.PCS_StringOrderFinalisedDate] addObject:pcs];
}
}
这基本上就是创建的 - monthsChartDataDictionary。一个字典,其键的格式为yyyy-MM
,并且其关联键中包含数据集数组。
{ //An nsdictionary holding over 13,500 elements.
"2013-05"=(..,..,..);
"2013-06"=(..,..,..);
"2013-07"=(etc);
"2013-08"=();
"2013-09"=();
"2013-10"=();
"2013-11"=();
"2013-12"=();
"2014-01"=();
"2014-02"=();
"2014-03"=();
"2014-04"=();
"2014-05"=();
}
然后运行for循环以同时实现两件事,参见下面的a)和b):
a)对于monthsChartDataDictionary字典中的每个月,我通过计算每个数据集的PieChart_TotalAmount
得到该月的总销售额。这用于创建一个折线图,显示全年的总销售额。
b)制作一个新词典 - finalPieChartData,其中每个键的格式为yyyy-MM
,存储的值是一系列产品,显示每个产品的总销售价值。这样可以制作一个饼图,显示在任何给定月份内产品的销售。其中12sp B - 250
是产品的名称。
如何在核心数据模型中最好地代表所有这些?
我想是否有办法存储所有必需的数据,总销售额也是如此,并且在给定的月份内将产品间的销售分开......所有这些都存储在核心数据中......或者如果它最好在进行这些计算时进行他们从核心数据库中退出,我猜这只会造成更多延迟。
到目前为止,我有这个:
我创造这个的逻辑是基于以下想法:
这是对的吗?有没有一种有效的方法存储一切?
答案 0 :(得分:0)
NSDateFormatter对性能非常有害。如果您在映射过程中使用它,则应尽量减少它的分配。如果你不想
,你可以提供第一步的代码片段您也可以在xcode product-profile-time profiler中使用。它可以帮助您跟踪低性能操作。
至于使用网络服务和核心数据,请查看restKit
答案 1 :(得分:0)
对于订单输入系统,您需要服务器端的月初至今(MTD)和年初至今(YTD)表,其中包含以下字段:更新日期,总销售额和订单总数。表格应与订单一起更新或每晚批量更新。该应用程序只需下载MTD数据即可生成所需的销售图表。为MTD表创建本地存储可能有一些价值,但是数据量减少可能没有必要。
如果需要过滤,请考虑为所需过滤器创建单个表(MTD),而不是尝试制表和重新计算应用中的所有内容。