在Php中序列化vs SQLite

时间:2011-02-07 10:12:27

标签: php sqlite serialization storage

我想将数组存储在文件中。 我转而使用csv(fgetcsvfputcsv)但是有很多与语言环境相关的错误。我不能继续使用它。 我使用序列化,但编辑非常困难。还有一个与\r相关的错误。

我正在寻找一种更好的国际方式将变量存储在文件中。

SQLite可以解决。我想知道SQLite与MySQL或基本序列化相比的性能。如果有错误,我会遇到。

注意:

  1. 数组是二维数组。与DB结构中的table->field相同。
  2. 我不想要额外的程序安装,可移植性是真正的问题,因为人们可以安装到任何服务器,PHP,MySQL就足够了。
  3. 为什么我不想存储在MySQL中,因为我将使用这种结构来提供缓存。我想要发布的最终产品,大部分时间都可以在没有DB的情况下运行。
  4. 我使用fgetcsv&编写了一个基本结构。 fputcvs。有bug!它剥离了一些字符。这就是为什么我在寻找替代方案。我不想从一开始就发明整个轮子,但PHP人员不懂编程:请查看:http://bugs.php.net/bug.php?id=48507

6 个答案:

答案 0 :(得分:7)

也许你有可能将数据缓存为真正的PHP。函数var_export为您提供数据的PHP表示。它有一些限制,serialize在循环引用时没有,但另一方面它更容易理解,因为你已经知道了语法。

答案 1 :(得分:3)

可能json_encode()json_decode()对你有好处吗? Sqlite不是多维数组的好解决方案。

答案 2 :(得分:2)

您是否考虑过使用YAML,

您可以找到YAML网站here,您可以找到一个小型的lib来处理YAML here

答案 3 :(得分:1)

是的,你需要序列化它。然后你可以把它存储在你喜欢的任何东西中。 SQLite,MySQL,PGSQL,平面文件等。由于您要对其进行序列化,因此区域设置应该没有问题。

<强> [编辑]

当然,您应该序列化并尝试存储的PHP对象。而且您不应该通过存储介质直接编辑它。你应该反序列化它并通过PHP操作它。

<强> [编辑]

由于您已声明不想使用数据库服务器,因此必须使用平面文件。

我会使用SQLite。如果您不想这样做,则需要创建自己的文件解析器。您可以为每个文件存储一个对象,并通过文件名识别对象。

但你必须考虑用户空间。如果这是一个问题,您可以使用会话。这对于缓存数据非常常见。

重申一下,您需要在使用任何存储方法之前序列化数据。它不是与SQLite序列化。它是serilaize + SQLite。您需要对其进行序列化,然后将其插入到SQLite数据库或序列化数据中,然后将其存储在会话中。

缓存数据并不是什么新鲜事。你没有开辟新天地。之前已经做了很多次。

答案 4 :(得分:0)

如果您打算将数组用作列表,集合或哈希值,请查看键值存储redis

它非常快速,完成了这种用途,并且有很多PHP绑定。

答案 5 :(得分:0)

你的意思是do_put()方法here?只需注意“CACHE CONTENT”部分......输出缓存文件如下所示:

<?php
$value = <<<FILEINFO_26
a:13:{s:4:"f_id";i:26;s:6:"f_hash";s:32:"d07288e848cc6219b7a793b0532f8fed";s:11:"f_extension";s:3:"jpg";s:6:"f_name";s:7:"214.jpg";s:6:"f_size";i:12902;s:10:"f_duration";N;s:6:"f_mime";s:10:"image/jpeg";s:11:"f_os_compat";N;s:9:"f_version";s:4:"NULL";s:14:"f_architecture";s:2:"32";s:7:"f_extra";N;s:11:"f_timestamp";i:1276516112;s:12:"f_dimensions";a:2:{s:5:"width";s:3:"180";s:6:"height";s:3:"227";}}
FILEINFO_26;

$is_array = 1;    

$ttl = 0; 
?> 

它使用serialize()并且还可以在Db中存储缓存...来源here