使用哪个数据库以及如何加速

时间:2014-10-29 08:59:31

标签: php mysql database performance database-design

我有一个存储和处理用户费用的项目。数据库上只有两个操作: INSERT SELECT 。数据库每天可能包含数百万条目(取决于用户数量或用户是公司等)。

常见问题:

  1. 显示从date xdate y的费用。 (大部分)
  2. 在查询(1)
  3. 上应用过滤器
  4. 显示特定项目的费用直至日期。 (整个表中的查询)
  5. 显示所有费用直至日期。 (很少)
  6. 1:我对使用哪个数据库感到困惑:SQL或NoSQL或SQL和NoSQL结合使用(在我的情况下如何?)。在查询大量数据时,我需要根据速度进行比较。

    2:由于每天可能包含数百万条记录,因此查询产生的数百万行需要从服务器传输到客户端。 (在我的情况下,还有一个开销。因为数据库服务器远离Web服务器。所以结果需要从数据库服务器传输到Web服务器然后再传输到客户端。)如何使它更快?

    4:如果我选择MySQL,那就更好了: a:将整个数据转储到一个大的SQL表中。 b:为每天创建一个表(以日期作为表名),其中包含较少量的数据。 (我认为(b)在给出日期范围时会更快,因为我知道要选择哪个表而不是查看大表并查询具体日期。)

    3:目前我正在尝试使用MySQL。 (测试数据已经存在。我使用python脚本来解析该数据并将其转储到MySQL中。我可以编辑脚本并使其适用于任何类型的数据库。)我尝试了查询(4) 上面提到过。根据数据库服务器的结果,我的网络服务器/客户端(因为我正在测试,我的网络服务器现在是客户端。)被绞死,而查询的结果大约有1300万行被转移来自数据库服务器。所以我在PHP代码中使用了一个循环来限制查询1000行,如下例所示:

    (Loop until getting data from database){
        i=0;
        SELECT * FROM <Table> LIMIT i, 1000;
        i+=1000;
    }
    

    它仍然很慢,但现在系统在转移期间没有挂起。但LIMIT这里是否会起作用,获得前1000条记录(而i=0),然后是第二条1000条记录(而i=1000),依此类推。或者它将获得前1000条记录(而i=0),然后从0开始,但跳过前1000条记录并获得第2条1000条记录(而i=1000)依此类推,这将是明显要慢得多。 (我在网上搜索了解LIMIT的机制,但在任何地方他们都说LIMIT与ORDER BY不是如何通过LIMIT获取页面数据以及对它的性能有什么影响。)

    P.S。我不是数据库专业人士。只是一个初学者。所以要求专家&#39;启动项目前的建议。

1 个答案:

答案 0 :(得分:1)

如果您每天有数百万条记录,我认为您应该去NoSQL数据库。它将更快,更有效地处理大数据。我建议您elasticsearch,因为您只对大量数据执行INSERT和SELECT函数。它具有良好的文档,易于使用。我认为它会很好地为你服务。