![]() |
1
2
我计划对该数据(如和、差、平均值等)进行操作,并根据输入的计算生成另一列。 这是数据仓库星型模式设计的标准用例。购买Kimball的数据仓库工具包。在做其他事情之前,先阅读(并理解)星型模式。 “存储数据和操作的最佳方法是什么? “ 星图。 您可以将其实现为平面文件(csv很好)或RDBMS。如果使用平面文件,则编写简单的循环来进行数学运算。如果使用RDBMS,则编写简单的SQL 和 简单的循环。 “我主要关注的是随着数据集数量的增长速度/性能” 没有什么比平锉快的了。时期。RDBMS速度较慢。
RDBMS的价值主张源于SQL是一种相对简单的指定方法
“我应该意识到的陷阱/陷阱?” 数据库设计。如果你没有得到星型模式以及如何将事实与维度分开,那么所有的方法都是注定的。一旦你把事实和维度分开,所有的方法都大致相等。 “为什么要选择一个而不是另一个?” RDBMS缓慢灵活。平锉速度快(有时)不灵活。巨蟒在比赛场地上放平。 “在我开始设计之前,是否有任何可能影响设计的速度/性能缺陷/提升?” 星型模式:由维度表包围的中心事实表。没有什么能比得上它。 “是否有任何项目或框架可帮助完成此类任务?” 不是真的。 |
|
2
1
对于速度优化,除了更改底层存储机制之外,我建议使用其他两种方法进行调查: 1)使用中间数据结构。 如果最大化速度比最小化内存使用更重要,那么使用不同的数据结构作为计算的基础,而不是专注于底层存储机制,可能会获得良好的结果。实际上,这是一种策略,它大大减少了我所从事项目的运行时间,不管数据是存储在数据库中还是文本中(在我的例子中是XML)。 而求和和和和平均值只需要运行时 O(n) 更复杂的计算可以很容易地将其推到O(n^2)中,而无需应用此策略。O(n^2)将是一个性能冲击,它可能比从csv或数据库中读取的速度影响大得多。例如,如果您的数据行引用其他数据行,并且需要基于这些引用聚合数据。 因此,如果您发现自己进行的计算比求和或平均值更复杂,那么您可能会探索可以在o(n)中创建的数据结构,并将计算操作保持在o(n)或更好。正如马丁所指出的,听起来你的整个数据集都可以轻松地保存在内存中,所以这可能会带来一些巨大的胜利。您将创建哪种数据结构取决于您正在进行的计算的性质。 2)预缓存。 根据数据的使用方式,您可以提前存储计算值。一旦生成/加载数据,就执行求和、平均值等操作,并将这些聚合与原始数据一起存储,或者在程序运行时将它们保存在内存中。如果此策略适用于您的项目(即,如果用户没有即时提出不可预见的计算请求),那么无论数据来自文本还是数据库,读取数据都不应该是令人望而生畏的长时间运行。 |
![]() |
3
0
如果所有数据都能同时装入内存,那么最重要的是什么?从您给出的大小来看,这似乎很容易(最坏是几兆字节)。 如果是这样,我将不鼓励使用关系数据库,而是直接在Python中执行所有操作。根据您需要的其他处理,我可能更愿意使用二进制pickles,而不是csv。 |
![]() |
4
0
您可能需要按顺序排列所有行,还是只需要特定的已知行?
编辑:如果代码适合内存,那么一个简单的csv就可以了。如果可以使用纯文本数据格式,那么它总是比不透明格式更容易处理。 |