Day29 Lab 2 - Object storage数据压缩

资料的压缩最好是能做在前端,因为网路最慢的地方就是前後端的沟通了,现在的压缩演算法有很多,举凡gzip、PKzip、LZW、zlib等等

我们的Lab追求简单,於是使用了python本身就有的zlib,压缩和解压缩的使用非常简单,如下

def compress(data):
   return zlib.compress(data)

def decompress(data):
   print(data)
   return zlib.decompress(data)

https://github.com/kaichiachen/python-simple-object-storage/blob/master/utils/utils.py#L53

然後我们分别在upload object的时候进行压缩

content = compress(content.encode()) # content type will be byte after compress
hash = sha256(content)
size = len(content)
chunk = 10
for i in range(0, size, chunk):
   res = requests.post(f"{server_url}/objects/{name}", files={
                                                         'obj': content[i:i+chunk],
                                                         'hash':hash,
                                                         'version': args.version,
                                                         'start': i,
                                                         'length': chunk,
                                                         'size': size})

以及download的时候解压缩

while len(content)<size:
      try:
         content += requests.get(f"{server_url}/objects/{name}?version={version}&start={start}").content
      except KeyboardInterrupt:
         sys.exit()
      except Exception as e:
         start = len(content)
         print('Something wrong, downloading again...', e)
   try:
      print(f'Get content: {decompress(content).decode()}')
   except Exception as e:
      print(f'Something wrong: {e}')

於是乎,从使用者的角度来看,看起来就只是上传下载Object而已,性能的优化都在前端做好了


<<:  【在 iOS 开发路上的大小事-Day17】透过 Firebase 来管理使用者 (Sign in with Google 篇) Part1

>>:  Day 14 - Valid Palindrome

vok-orm 关联性资料的新增/查询 (下篇) + Vaadin 自订样式 - d09

承上篇 Refactor 上篇实作完成执行结果如上图所示,蓝色区块为该学生成绩,红色区块为新增成绩编...

Day 7 - Kotlin的条件判断

Day 7 - Kotlin的条件判断 前面一天我们讲到Kotlin里面的var跟val,今天我们要...

食谱搜寻系统制作_中

**制作目标 ** 资料库搜寻 在输入料理搜寻模式後,会让使用者输入料理名称或一项食材,再从资料库里...

建JS环境 Node Nodemon

我们飞快的结束惹html ,css,欢迎进入到下一个阶段JavaScrip。JS的助教很严,学习之前...

Day 6 - Rancher 系统管理指南 - 使用者登入管理

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...