【问题标题】:store an associative array in a file [closed]将关联数组存储在文件中[关闭]
【发布时间】:2012-07-03 10:13:03
【问题描述】:

我正在为 drupal 编写一个模块。我有一个大的关联数组(大约 1000 个条目),其中键为“字符串”,值为“浮点数”。

eg. $array = array('hello' => 122.23, 'name' => 334.3 ....)

我想通过序列化将它存储在数据库中..但是数组大小是动态的,所以我想将它存储在一个文件中以减少访问时间..

我应该在我的 .module 中使用哪些 drupal7 api 函数来创建文件、写入内容并从文件中读取数组,它们比等效的 php 文件处理函数有什么优势?

注意 - 此数组不经常使用,因此我不想将其存储为持久变量。

【问题讨论】:

  • 为什么不为这些对创建一个数据库表?
  • @George Stocker - 为什么这个离题老兄??
  • @matt gibson- 数组长度(大约 1000 个条目)非常大,并且会不断增加.. 因此将每个键值对存储在数据库中的单独行中,然后将它们全部组合到重新生成数组将花费太多时间。这就是为什么我想继续使用简单文件或将其存储在 xml 中。
  • @George Stocker - 为什么这个离题?伙计,没有像你一样聪明的人,并且仍在学习中..所以如果你不能帮助他们解决问题,那么至少不要通过消除他们的疑虑和否决他们来打击他们的士气..我认为问并做一分钟的傻瓜总比不问和永远做傻瓜更好!
  • @GeorgeStocker 谢谢伙计,但我认为没有规定不能在此处提出 Drupal 相关问题。如果您有一个特定的主题列表 - 软件和编程语言,只能在此处提出问题,那么我很乐意查看..顺便说一句,这里已经有大约 9552+968 个关于 drupal 模块的问题,那么您是否也将它们关闭/迁移为题外话?

标签: drupal drupal-7 drupal-modules


【解决方案1】:

我个人不会打扰,我会使用 variable_set() 将其添加为持久变量。变量表使用 longblob,所以我看不出有什么问题,而且数据被缓存以便快速访问。

如果您想创建一个文件并以这种方式存储它,您可以在http://api.drupal.org/api/drupal/includes!file.inc/group/file/7 找到所有功能,尽管这样做意味着对数据库至少有一次访问,因为所有文件都通过 file_managed 表。而如果将其存储为持久变量,则数据已经可供模块使用,无需查询数据库,因为数据已经在 Bootstrap 过程中提取。

【讨论】:

  • 谢谢..我不知道持久变量..我会使用那些
  • 在阅读了这个 [link]drupal.stackexchange.com/questions/15118/… 之后,我意识到使用 variable_set 和 variable_get 的持久变量每次都会清除缓存,因为它会在页面请求之间和所有用户之间持续存在。它会严重影响性能..
  • 这也表示不应该使用持久变量来存储大量数据 [link] api.drupal.org/api/drupal/includes%21bootstrap.inc/function/…
  • 它实际上是在说“不要粗心地使用 variable_set() 来存储大量数据,这些数据只会在单个页面或自定义方法中使用”。这与仅仅说“不要存储大量数据”不同。这取决于您更改这些值的频率,而您在问题中没有提到这些值。如果您的价值观发生了很大变化,我会创建一个表并将其存放在那里。如果您担心序列化字符串太长,您应该考虑在 MySQL 中设置一个更高的 max_allowed_pa​​cket 值。
  • 哦,那是我的错。。无论如何,要存储的数据不经常使用,所以我认为持久变量的使用已经过时了。。
猜你喜欢
  • 1970-01-01
  • 2021-07-06
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 2021-06-09
  • 2011-03-21
  • 1970-01-01
相关资源
最近更新 更多