【问题标题】:python / php - cross-language string compression (uses gzcompress/urlencode/json)python / php - 跨语言字符串压缩(使用 gzcompress/urlencode/json)
【发布时间】:2013-03-14 15:01:51
【问题描述】:

我在 Python 2.6 中有一个例程,将大量 html 文本存储在 AWS DynamoDB 数据库中,问题是这些“blob”在进行简单检索时会占用大量空间和计算单元,所以我正在寻找想办法把字符串压缩成更轻量级的东西。

我已经对以下内容进行了一些简单的测试,它可以工作(大大减少了 DynamoDB 计算单元),但我正在寻找关于这是否是最好的方法的意见。

以下是我用来生成 json 数组的纯文本 gzip 压缩版本的 Python 2.6 代码。 json 数组包含几个键,每个键都有一大块 html。

import urllib, json
str = urllib.quote(json.dumps({'foo1': 'bar'}).encode('zlib').encode('base64'))

然后使用 php,我可以运行以下命令将字符串返回到其自然数组:

json_decode(gzuncompress(base64_decode(urldecode($str))),1);

有没有人有任何提示或者这是实现我的目标的最佳方式?

【问题讨论】:

  • 谢谢,我正在慢慢地在 SO 上发布更好的问题 :)
  • 字符串是否需要Base64编码?否则,您的解决方案似乎是一个很好的解决方案。如果没有人想出更好的主意,请以问答方式回答您自己的问题,并改写您原来的问题以匹配。
  • base64 编码的原因是它将来自 gzip(字节)的响应转换为纯字母数字字符串,然后可以将其作为纯字符串存储在数据库中。 base64 解码然后将字符串转换回字节等。

标签: php python base64 gzip


【解决方案1】:

您真的需要将数据作为纯字符串保存在数据库中吗?您可以省略 base64 编码并将数据以二进制形式保存到数据库中,以稍微提高代码速度。无论如何,数据已被压缩,因此您无法直接将其可视化。 http://aws.amazon.com/about-aws/whats-new/2012/08/21/dynamodb-announces-binary-data-types/

【讨论】:

    【解决方案2】:

    你可以使用 base64 编码

    Python 代码:

    import base64
    print(base64.b64encode(b"Hello World").decode())
    

    PHP 代码:

    base64_decode("your base64 encoded text from the python script")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 2011-11-12
      相关资源
      最近更新 更多