选择优化的表结构以提供聚合日志数据

时间:2014-07-13 14:45:16

标签: database sqlite database-design

我正在进行一些日志文件解析,目的是通过使用 SQLite 作为后端的Web应用程序来访问结果。因为它是基于网络的,我需要针对SELECT查询优化速度。

我也希望尽可能减少数据库的文件大小。

数据加载是一个单独的过程,我更喜欢进行所有数据争用,因此获取数据是一个简单的“选择”,并且不需要进一步的服务器端/客户端处理。

示例输入

date                    layer       format      code
2014-05-06 18:09        beta        jpeg        27700
2014-05-06 19:52        beta        jpeg        27700
2014-05-07 00:10        beta        png         4326
2014-05-07 01:25        alpha       png         4326
2014-05-07 01:35        beta        png         27700
2014-05-07 10:15        beta        png         27700
2014-05-07 10:20        alpha       jpeg        43262
2014-05-07 18:00        beta        png         27700
2014-05-07 18:02        beta        jpeg        27700
2014-05-07 18:03        beta        jpeg        27700
2014-05-07 18:05        beta        jpeg        27700
2014-05-07 19:17        alpha       jpeg        4326
2014-05-07 20:46        beta        jpeg        27700

有数百万行,数百个图层,十几种+格式,以及大约5000种可能的代码。

由此我计划使用一系列视图从其所处的任何结构中提取数据。我预计在执行此部分时不会出现任何问题,这只是我正在努力的结构。

示例输出

下面是一系列选择,展示了我希望提取的东西。

--This one for example might have a `group by month` clause in the View
select * from layer_view 

layer       count
alpha       3
beta        10

--sum of all formats
select * from format_view

format      count
png         6
jpeg        7

--Formats that are used by the "alpha" layer.
select * from layer_format_view where layername = "alpha"
format      count
png         1
jpeg        2

--sum all codes codes
select * from code_view

format      count
4326            4
27700           9

--codes that are used by the "beta" layer.
select * from layer_format_view where layername = "beta"
code        count
4326            1
27700           9

--I also want to be able to pull by date and it'll show the number of entries
select * from date_view where layer = "beta" [grouping by day]
date            count
2014-05-06      2
2014-05-07      8

希望很清楚。所以考虑到这一点,我应该使用什么样的结构? 感谢。

0 个答案:

没有答案