所以我有很多(数百万)的记录要处理。我试过MongoDB和Neo4j,它们都简单地让我的双核ubuntu box停了下来。
我想知道(我不相信有)是否有任何方法可以将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,但它应该能够与之匹敌!!
发布于 2017-05-18 23:23:07
您是否考虑过关系型数据库,如Mysql、PostgreSql、MS Sql server?
我看到您尝试过MongoDB和Neo4J,前者是一个面向对象的数据库,后者是一个面向节点的数据库。
我知道NoSQL是一个很好的趋势,但是我在我的百万条记录集合上尝试了NoSQL,它的性能太差了,所以我又换回了Relational SQL。
如果你仍然坚持使用NoSQL,试试Redis和Memcached,它们都是内存数据库。
发布于 2017-05-18 23:15:03
您可以使用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
https://stackoverflow.com/questions/44051384
复制相似问题