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

Php 使用哪个数据库以及如何加速,php,mysql,database,performance,database-design,Php,Mysql,Database,Performance,Database Design,我有一个项目来存储和处理用户的费用。数据库上只有两个操作:插入和选择。数据库每天可能包含数百万条条目(取决于用户数量或用户是否为公司等) 常见查询: 显示从日期x到日期y的费用。(大部分) 对查询应用筛选器(1) 显示截止日期前特定项目的费用。(整个表格中的查询) 显示截止日期的所有费用。(很少) 1:我不知道该使用哪个数据库:SQL还是NoSQL,或者SQL和NoSQL结合使用(我的情况如何?)。我需要在查询大量数据时基于速度进行比较 2:因为每天它可能包含数百万条记录,所以查询产生的数百万行

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

常见查询:

  • 显示从
    日期x
    日期y
    的费用。(大部分)
  • 对查询应用筛选器(1)
  • 显示截止日期前特定项目的费用。(整个表格中的查询)
  • 显示截止日期的所有费用。(很少)
  • 1:我不知道该使用哪个数据库:SQL还是NoSQL,或者SQL和NoSQL结合使用(我的情况如何?)。我需要在查询大量数据时基于速度进行比较

    2:因为每天它可能包含数百万条记录,所以查询产生的数百万行需要从服务器传输到客户端。(在我的例子中,还有一个开销。因为数据库服务器与Web服务器是远程的。因此,结果需要从数据库服务器传输到Web服务器,然后再传输到客户端。)如何加快速度

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

    3:目前我正在尝试MySQL。(测试数据已经存在。我正在使用python脚本解析数据并将其转储到MySQL中。我可以编辑脚本并使其适用于任何类型的数据库。)我尝试了上面提到的查询(4)。根据数据库服务器的结果,我的web服务器/客户机(因为我正在测试,我的web服务器现在就是客户机)在从数据库服务器传输大约1300万行查询结果时被挂起。因此,我在PHP代码中使用了一个循环来限制每次查询1000行,如下示例所示:

    (Loop until getting data from database){
        i=0;
        SELECT * FROM <Table> LIMIT i, 1000;
        i+=1000;
    }
    
    (循环直到从数据库获取数据){
    i=0;
    从极限i中选择*1000;
    i+=1000;
    }
    
    它仍然很慢,但现在系统在传输过程中没有挂起。但是
    LIMIT
    在这里的工作方式是,获取前1000条记录(而
    i=0
    ),然后获取第二个1000条记录(而
    i=1000
    )等等。或者它将获得前1000条记录(而
    i=0
    ),然后再次从0开始,但跳过前1000条记录,然后获得第二个1000条记录(而
    i=1000
    ),等等,这显然会慢得多。(我在网上搜索是为了了解限制的机制,但到处都在谈论有顺序的限制,而不是如何获得有限制的页面数据以及它对性能的影响。)


    p.S.我不是数据库专家。只是个初学者。因此,在开始项目之前征求专家的建议。

    如果您每天有数百万条条目,我认为您应该使用NoSQL数据库。它将在处理大数据方面更快、更高效。我建议您这样做,因为您只能对大量数据执行插入和选择功能。它有一个很好的文档,并且很容易使用。我认为它会很好地为您服务。

    关系数据库的速度将取决于您如何对表进行结构化和索引;其他一切都来自于此;但是,如果设计得当,像MySQL这样的关系数据库完全能够快速有效地处理数百万条记录。@MarkBaker我目前的方法将数据存储在5个不同的表中,以达到规范化级别3。我知道它可以快速从数百万条记录中提取几行。但是,从数百万条记录中获取数百万行是否相同?这取决于您的索引和查询。。。。但是,在可能的情况下,您应该避免使用任何数据库返回数百万条记录,而是使用SQL函数返回您需要的数据一个包含数百万个数据点的图形将不容易被人类读取。。。。所以我很怀疑你真的这么做。我希望您的图表按日期或部门(或类似部门)进行聚合,因此您不需要返回数百万行,只需让数据库查询返回聚合数据在这种情况下,您需要返回数百万行,无论您是使用关系数据库还是NoSQL数据库,当您必须处理事务中的大量数据时,它都将是缓慢而低效的