2014-08-28 83 views
0

我正在开发一个Web应用程序,用于从多个平台的API(如Google Analytics,Google AdWords,Bing Ads等)提取数据并将其显示在信息仪表板上。需要关于数据库结构化的建议

有两种不同类型的数据,我从API的拉动:

  1. 度量(即整数,浮点数,空值)
  2. 表(JSON编码度量的阵列)

对于度量标准,我将每个列存储为varchar(255),对于Tables,我将每列存储为中文文件,因为JSON字符串可能会变得非常长。

目前,我在按类别/平台独立的个人的表存储度量这样:

MetricsAnalytics (Google Analytics) 
MetricsAdwords (Google AdWords) 
MetricsBingAds (Bing Ads) 
Metrics...  (More Platforms) 

,我存储在一个类似的方式表。不过,我已将Google Analytics表分成不同的类别,因为我最初将表存储为行中的大型变量(如varchar(4000+)),因为我希望获得最佳性能。当我意识到我无法再预测JSON会有多大时,我改变了列类型。因此,数据库表是这样的:

// Note that these are all MEDIUMTEXT columns 

TablesCategoryA (Google Analytics) 
TablesCategoryB (Google Analytics) 
TablesCategoryC (Google Analytics) 
TablesCategoryD (Google Analytics) 
TablesAdwords (Google AdWords) 
TablesBingAds (Bing Ads) 
Tables...  (More Platforms) 

现在,我已经写完了后端代码来填充这些表,我回去和修改我迄今写的。我希望优化我在应用程序中进行的查询次数(每次页面加载时执行177条语句)。

我不知道它是否会有所作为,如果我是对表,现在结合在一起逼到两个数据库表:

Metrics (All varchar(255)'s)

Tables (All mediumtext's)

任何提示和指针将不胜感激!谢谢!

编辑

我觉得应该注意的是,结合的情况下,指标表将有大约50-60列,并可能在未来的增长。表格较小,但未来可能会增长。

+1

MySQL或SQL服务器填充这些表?请下定决心。 – Barranka 2014-08-28 16:02:47

+0

@Barranka我的道歉,并不意味着添加sql-server作为标签。 – user3745117 2014-08-28 16:03:32

+1

如果你正在存储大量的JSON数据,MySQL不太适合。你会更好地使用[PostgreSQL](http://www.postgresql.org/),它有本地支持。目前还不清楚,为什么你选择'LONGTEXT'时选择使用'MEDIUMTEXT'来避免截断问题,并且基本上没有额外开销。 – tadman 2014-08-28 16:07:47

回答

3

这是非常困难的没有真正弄脏提供建议,但几件事情映入脑海:

  1. 你需要存储的数据,或者你能不能从第三方服务把它根据需要? (您可以使用内存缓存在服务器上暂时保存它)
  2. 数据实际上是关系性的吗?换句话说,如果每个表是一个独立的实体,使用SQL数据库可能并不是最好的想法,您可以改为使用NoSQL数据库,该数据库针对大型无关文本/ json数据块进行了优化
  3. 大多数数据库设计是在插入数据的容易程度,从表格中选择容易度以及执行多少标准化之间进行权衡。你听起来像是你找到了一个很容易插入但很难从中选择的插入。你的决定必须是,哪种表现更重要?如果您将大量数据读入您的Web应用程序,请优化SELECT语句的设计。这意味着如果您并不总是从特定表中提取所有数据,那么不会在表中使用大量列(或者至少不是大量的大型文本列),以确保您使用索引或子表。
  4. 如果您的Web应用程序显示大量数据,最好设计表格以匹配正在显示的内容(或多或少),以便选择数据非常直观,然后您可以花更多时间工作如何从谷歌/冰等

希望帮助

+0

感谢您的回复。 1.我确实需要存储它们,因为度量标准将被操纵,应用程序允许查询和查看自定义日期范围。 2.我正在Laravel PHP框架上构建应用程序,由于我是初学者,因此我没有考虑数据库中的任何替代方案。现在有兴趣这样做。 3.我会说INSERT/SELECT的重要性相当。该算法从API(已经相当繁重)中提取数据并临时存储它们,并且用户决定是否保存仪表板。那种方法会有利于我目前的设置? – user3745117 2014-08-28 16:19:14

+0

我认为困难的部分是大多数数据是不相关的,这意味着你可能把它放到一个表中。使用单独表的原因是为了使用外键可以与其他表相关的数据,允许在较小数据集上操作或出于缩放原因。这听起来不像其中的任何一个适用于你,所以给它一个!比较两种选择不应该太难。 – Lukos 2014-08-28 16:26:03

+0

谢谢,这足以让我作出决定。谢谢! – user3745117 2014-08-28 16:37:36

相关问题