Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么是更快的平面文件或MySQL RAM数据库?_Php_Sql_Mysql_Performance_Flat File - Fatal编程技术网

Php 什么是更快的平面文件或MySQL RAM数据库?

Php 什么是更快的平面文件或MySQL RAM数据库?,php,sql,mysql,performance,flat-file,Php,Sql,Mysql,Performance,Flat File,我需要一个简单的方法让多个运行的PHP脚本共享数据 我应该使用RAM存储引擎创建一个MySQL数据库,并通过它共享数据(多个脚本可以同时连接到同一个数据库吗?) 或者每行有一条数据的平面文件会更好吗?平面文件?不 使用好的数据库引擎(MySQL、SQLite等)。然后,为了获得最佳性能,请使用memcached来缓存内容 通过这种方式,您可以轻松可靠地使用经验证的服务器软件在进程之间共享数据,该软件可处理并发性等问题。。。但是您可以获得缓存数据的速度 请记住以下几点: MySQL有一个查询缓存

我需要一个简单的方法让多个运行的PHP脚本共享数据

我应该使用RAM存储引擎创建一个MySQL数据库,并通过它共享数据(多个脚本可以同时连接到同一个数据库吗?)


或者每行有一条数据的平面文件会更好吗?

平面文件?不

使用好的数据库引擎(MySQL、SQLite等)。然后,为了获得最佳性能,请使用memcached来缓存内容


通过这种方式,您可以轻松可靠地使用经验证的服务器软件在进程之间共享数据,该软件可处理并发性等问题。。。但是您可以获得缓存数据的速度

请记住以下几点:

  • MySQL有一个查询缓存。如果重复发出相同的查询,则无需添加缓存层即可获得大量性能
  • MySQL真的很快。您是否进行了负载测试以证明其速度不够快

  • 为了维护人员的理智,请不要使用平面文件

    如果您只是希望尽可能快地共享数据,并且可以将所有数据保存在RAM中,那么这是一个完美的解决方案


    如果您希望数据持久化,那么使用DBMS,比如MySQL。

    我想说,MySQL DB将是更好的选择,除非您有一些机制来处理平面文件上的锁(以及一些控制访问的方法)。在这种情况下,DB层(不管具体的DBMS如何)充当间接层,让您不用担心它


    因为OP没有指定web服务器(PHP实际上可以从命令行运行),所以我不确定缓存技术是否就是他们所追求的。OP可能希望进行某种非网站驱动的飞行数据转换。谁知道呢。

    一般来说,数据库更好,但是,如果您共享的数据量很少,而且大部分是静态的,那么使用平面文件可能会带来性能优势(和简单性)


    除了琐碎的数据共享之外,我会选择一个数据库。

    如果您的系统有一个PHP缓存(将编译好的PHP代码缓存在内存中,如APC),请尝试将数据作为PHP代码放入PHP文件中。如果您必须写入数据,则会出现一些安全问题。

    如果您在多台服务器上运行数据,则基于文件系统的方法将无法解决这些问题(除非您拥有一个一致的共享文件系统,这不太可能,也可能无法扩展)

    因此,无论如何,您都需要一个基于服务器的数据库,以允许在web服务器之间共享数据。如果您认真考虑性能或可用性,您的应用程序将支持多个web服务器

    我需要一个简单的方法来处理多个问题 运行PHP脚本以共享数据

    ,和memcached都是很好的选项,具体取决于上下文。也可能是一种选择

    我应该创建一个带有RAM的MySQL数据库吗 存储引擎,并通过 可以将多个脚本连接到 同一分贝吗?)

    这也是一个不错的选择,但可能不会像APC或memcached那样快

    或者是用一张纸把平面锉平 每行数据更好吗

    如果这是只读数据,这是可能的——但可能比上面的任何选项都慢。尤其是数据量大的时候。然而,不要编写自定义解析代码,只需构建一个PHP数组,并且包含()文件。

    如果这是一个可由多个写入程序同时访问的数据存储,请务必不要使用平面文件!从多个进程写入平面文件可能会导致文件损坏。您可以锁定该文件,但存在锁争用问题和长时间锁等待的风险


    处理并发写操作是mysql和memcached等应用程序存在的原因。

    1-平面文件可用的地方: 平面文件可以比数据库快,但在非常特定的应用程序中。 如果数据从头到尾读取而不进行任何搜索或写入,则速度会更快。 如果数据不适合内存,需要完全读取才能完成任务,那么它“可以”比数据库快。此外,如果写操作比读操作多得多,那么平面文件也会发光,大多数默认数据库设置将需要让读查询等待写操作完成,以便维护索引和外键。使写查询通常比简单读取慢

    TD/LR车辆: 将平面文件用于基于作业的系统(也称为简单日志解析),而不是用于web搜索查询

    2-平锉坑落下: 如果使用平面文件,则需要在文件更改时使用自定义锁定机制同步脚本。如果你有一个bug的话,这可能会导致减速、腐败甚至死锁

    基于3-Ram的数据库? 大多数数据库都有用于查询结果和搜索索引的内存缓存,这使得使用平面文件很难击败它们。因为它们缓存在内存中,所以让它完全从内存运行在大多数情况下是无效和危险的。最好正确调整数据库配置

    如果您希望使用ram优化性能,我将首先考虑从ram驱动器运行php脚本、html页面和小图像。其中,缓存机制更可能是粗糙的,并且系统地访问硬盘驱动器以获取不变的静态数据

    使用负载均衡器可以达到更好的效果,使用背板连接群集到基于ram的SAN阵列。但这完全是另一个话题

    5-多个脚本能否同时连接到同一个数据库

    是的,它被称为连接池。在php(客户端)中,它是一个函数,用于打开一个连接,即mysql-pconnect()。 我认为,您可以在php.ini中配置最大开放连接。mysql服务器端的类似设置定义了/etc/mysql/my.cnf中的最大并发客户端连接数

    您必须这样做,才能利用cpu的并行处理并避免