所以我有很多(数百万)记录,我正在尝试处理。我尝试过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应该能够匹配!!
答案 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