代码之家  ›  专栏  ›  技术社区  ›  Henrik Heimbuerger Kenneth Reitz

寻找一种在云中存储小数据包的简单而简约的方法

  •  3
  • Henrik Heimbuerger Kenneth Reitz  · 技术社区  · 14 年前

    我正在寻找一个非常简单和免费的小数据包的云存储。

    基本上,我想编写一个Greasemonkey脚本,用户可以使用共享数据集在多台计算机上运行。数据主要只是一个数字,每个用户8个字节就足够了。

    • 开发简单(几个小时是个有趣的项目,我不想在同步上投入两倍)
    • 理想情况下,用户不必注册(他们只需获得一个可以在所有机器上输入的随机密钥)
    • 我不需要注册(这都是油腻的东西,所以没有办法隐藏秘密,比如开发者密钥)
    • 值中没有私有数据,因此另一个用户通过猜测随机密钥来访问这些信息并不重要

    第一个想法:

    • 以表单作为前端存储在Google文档上。当然,这有点难看,每个用户都需要重新设置它。
    • 我可以设置一个googleappengine实例,它允许将一个数字存储到一个键中,然后按键检索这个数字。这不难,但听起来对我的需要来说还是太过分了。
    • 我可以创建一个Firefox插件而不是Greasemonkey脚本并使用Mozilla Weave/synch,不幸的是,它还不支持存储HTML5本地存储,所以GM还不够。当然,我必须为Opera和Chrome实现相同的功能(假设它们有类似的服务),而不仅仅是重用用户脚本。

    有谁有我不知道的好主意或服务吗?


    4 回复  |  直到 11 年前
        1
  •  4
  •   Henrik Heimbuerger Kenneth Reitz    10 年前

    OpenKeyval 正是我想要的。

        2
  •  1
  •   Edward83    14 年前

    我认为GAE是个不错的选择。根据您对存储大小的要求,您将永远无法免费通过GAE的500mb存储空间。而且,由于您的服务具有REST特性,因此可以很容易地跨浏览器移植脚本;)

        3
  •  1
  •   Henrik Heimbuerger Kenneth Reitz    9 年前

    我被要求分享我的GAE密钥/值存储解决方案,所以它来了。请注意,此代码已多年未运行,因此可能是错误的和/或非常过时的GAE代码:

    application: myapp
    version: 1
    runtime: python
    api_version: 1
    
    handlers:
    - url: /
      script: keyvaluestore.py
    

    键值存储.py

    from google.appengine.api import users
    from google.appengine.ext import db
    from google.appengine.ext import webapp
    from google.appengine.ext.webapp.util import run_wsgi_app
    
    class KeyValue(db.Model):
        v = db.StringProperty(required=True)
    
    class KeyValueStore(webapp.RequestHandler):
        def _do_auth(self):
            user = users.get_current_user()
            if user:
                return user
            else:
                self.response.headers['Content-Type'] = 'text/plain'
                self.response.out.write('login_needed|'+users.create_login_url(self.request.get('uri')))
    
        def get(self):
            user = self._do_auth()
            callback = self.request.get('jsonp_callback')
            if user:
                self.response.headers['Content-Type'] = 'text/plain'
                self.response.out.write(self._read_value(user.user_id()))
    
        def post(self):
            user = self._do_auth()
            if user:
                self._store_value(user.user_id(), self.request.body)
    
        def _read_value(self, key):
            result = db.get(db.Key.from_path("KeyValue", key))
            return result.v if result else 'none'
    
        def _store_value(self, k, v):
            kv = KeyValue(key_name = k, v = v)
            kv.put()
    
    application = webapp.WSGIApplication([('/', KeyValueStore)],
                                         debug=True)
    
    def main():
        run_wsgi_app(application)
    
    if __name__ == "__main__":
        main()
    
        4
  •  0
  •   Nick    14 年前

    我见过的最接近的就是亚马逊的简单队列服务。
    http://aws.amazon.com/sqs/

    我自己也没有用过,所以我不确定开发者关键方面是如何工作的,但是他们每月给你100000个免费查询。