仅从PHP文件加载一个数组(到内存中)

时间:2017-05-18 15:02:55

标签: php arrays nosql

所以我有很多(数百万)记录,我正在尝试处理。我尝试过MongoDB和Neo4j,只是简单地研究我的双核ubuntu盒子。

我想知道(并且我不相信)如果有任何方法将PHP数组存储在文件中但只将一个数组加载到内存中。例如:

<?php
$loaded = array('hello','world');
$ignore_me = array('please','ignore');
$ignore_me2 = array('please','ignore','again');
?>

所以我可以有效地调用$loaded数组但其他数据没有加载到内存中(即使它们在同一个文件中)?我知道fread / fopen,但这往往是文件是一般文本块的地方。

如果(我怀疑)答案是否定的 - NoSQL数据库如何不需要a)为每条记录创建一个文件并且b)将所有内容加载到内存中?我知道Neo4j使用Java但PHP应该能够匹配!!

2 个答案:

答案 0 :(得分:1)

您是否考虑过关系数据库,例如Mysql,PostgreSql,MS Sql server?

我看到你尝试了MongoDB,一个面向对象的数据库,以及Neo4J,一个面向节点的数据库。

我知道NoSQL是一个很好的趋势,但我尝试使用我的数百万条记录的集合来编写NoSQL,它的表现非常糟糕,我切换回了Relational SQL。

如果您仍然坚持使用NoSQL,请尝试使用Redis和Memcached,它们是内存数据库。

答案 1 :(得分:0)

您可以使用PHP Streams读取/写入文件。

读取文件并转换为数组

$content = file_get_contents('/tmp/file.csv'); //file.csv contains a,b,c
$csv = implode(","$content); //csv is now array('a', 'b', 'c');

写入文件

$line = array("a", "b", "c");
// create stream
$file = fopen("/tmp/file.csv","w");
// add line as csv
fputcsv($file, $line);
// close stream
fclose($file);

您还可以循环并向csv和循环添加行并检索行。 https://secure.php.net/manual/en/function.fputcsv.php

您可以使用fgetcsv检索多行,这也保留了下一行的指针 https://secure.php.net/manual/en/function.fgetcsv.php