【问题标题】:Read and write dat file in php在php中读写dat文件
【发布时间】:2011-09-06 08:19:04
【问题描述】:

最近我使用 Maxmind geoip 根据 ip 定位国家和城市。它在 dat 文件中有大量内容。但是检索这些记录会在几秒钟内发生。所以我很想学习和使用 php 中的技术。

首先我看到一些视频文件正在使用这个 .dat 扩展文件,现在是文本信息。那么 .dat 扩展名实际上是什么? php可以读写吗?

谢谢!

【问题讨论】:

    标签: php file file-io io


    【解决方案1】:

    据我所知,dat 扩展名意味着一个通用文件,您可以在其中以您喜欢的格式编写您需要的内容。
    我的意思是,在每个文件中你都可以这样做,但通常如果你找到一个 xml 文件,你会假设你在里面找到了 xml 格式的文本;相反 dat 文件不会被识别为可以使用特定软件解码的文件,如果您不知道是谁以及如何编写的。

    【讨论】:

    • 是的,Marco,它不是标准格式。但我注意到的是,他们在 dat 文件中有一个巨大的城市、国家数据库列表,并且它在一秒钟内就被检索到了。这就是为什么我有兴趣使用它。我认为您的意思是,我们不知道他们使用什么方法来创建该 dat 文件。是这样吗?
    • 创建它的方法无关紧要。存储数据的格式。
    • @Sekar:我的意思是要解析一个文件,你必须知道里面的数据是如何组织的。然后我们可以“研究”城市是否按字母顺序排序以及数据结构是否良好以便快速检索。这可能会在时间上产生很大差异。
    • @Marco:它们应该结构良好,这就是检索如此快速的原因。如果我们提出任何支持票,他们会回答吗? ;)
    • @Sekar:我不知道他们是否喜欢你可以用另一个不是他们开发的软件来阅读他们的文件......无论如何,给他们一个机会:问他们并等待他们回答。你能张贴一些那个文件吗?它是ASCII还是二进制?请:发布它编辑您的问题,而不是在评论中!
    【解决方案2】:

    文件很可能是他们开发的自定义格式;如果它是开源的,你可以用 PHP 重新实现它(如果它还没有用 PHP 编写),或者可以通过 API 访问数据。

    速度来自于它会以某种方式被索引,或者就像“每条记录将 100 字节进一步移动到文件中”。

    【讨论】:

      【解决方案3】:

      这里有很多问题。

      首先,文件是database - 它存储数据。有很多数据库模型 - 关系的、分层的、面向对象的、向量、超立方体、密钥库......所有这些都有现成的实现。

      有些数据库比其他数据库更适合管理特定的数据结构。地理空间数据是一种常见的专业化 - 以至于许多其他数据库类型将提供矢量功能(例如关系数据库的 mysql 和 postgresql)。

      对于大多数数据库系统,使用数据库服务的应用程序不会直接访问数据文件——而是通过另一个进程进行访问——这与 PHP 尤其相关,因为它通常作为多个独立进程运行,没有复杂的文件锁定功能。

      因此,如果您希望自己实现地理信息的 IP,我建议您坚持使用关系数据库或 nosql 密钥库(您不需要地理空间的东西来进行前向查找)。

      但请记住,IP 到地理查找数据并不像销售产品的人们所相信的那样准确/精确。如果您的目标是获取有关用户的准确位置信息,HTML5 geolocation API 提供了更好的数据 - 问题在于用户浏览器上功能的可用性。

      【讨论】:

      • 感谢您的努力。但我的问题是关于使用 php 读写 .dat 文件。为了解释为什么我对使用 maxminds 地理定位器作为示例的技术感兴趣。我知道城市信息只有 80% 的准确率,但我想说的是拥有他们能够在一秒钟内为任何给定 IP 检索到的大量数据。
      • @Sekar:你没有抓住重点。是的,在很大程度上,数据结构会影响性能 - 但是已经有使用不同数据模型的数据访问层非常有效的实现,您可以自己查看代码和数据结构。 GeoIP 查找不是一个巨大的数据集(大约 2000 万个地址 - 这不是 43 亿的原因应该很明显 - 但即使这也不是一个巨大的数据集)。如果我的查询需要一秒钟才能完成(在更大的数据集上),我会非常担心性能。
      • 是的!这是一个有效的观点,dat 文件仅在 20 mb 左右。可能这就是性能的原因。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      相关资源
      最近更新 更多