大厂Data+Agent 秘籍:腾讯/阿里/字节解析如何提升数据分析智能。 了解详情
写点什么

开源的轻量级 JSON 存储 Kinto 介绍

  • 2015-12-22
  • 本文字数:2437 字

    阅读完需:约 8 分钟

Kinto 是个提供了同步与分片功能的轻量级 JSON 存储服务,并且易于使用。它在 Mozilla 内部得到了广泛的应用,基于 Apache v2 许可。

基本上,Kinto 是个服务,客户端应用可以通过它存储和获取 JSON 数据。为了对这些数据提供同步与共享特性,Kinto 引入了一些基本概念。

  • Bucket:可以将 bucket 看作是命名空间:如果存储在不同的 bucket 中,那么集合名之间是不会出现冲突的。
  • Collection:记录的集合。
  • Record:实际存储的数据。
  • Group:定义权限的具名 principal 列表。

Record 是数据的最小单元。默认情况下是无模式的,JSON 可以包含任何数据。Collection 是一组 Record。我们以列表的形式操纵 Record,可以对其进行过滤和排序。Bucket 是个抽象的概念,用于组织集合及其权限。Kinto 提供了一个名为 default 的 Bucket,其集合与记录只可由当前用户访问。

Kinto 所操纵的每一种对象都共享一些公用的属性:

  • 一个唯一标识符
  • 一个版本号,有修改时会自增
  • 一组权限

这些概念非常类似于磁盘,其中的 Bucket 就是分区、Collection 是目录,而 Record 则是文件!

Kinto 拥有一个用户组的概念。一个组会有一个成员列表,他们属于一个 Bucket。权限引用的是组而非单个用户,这使得我们可以轻松定义“角色”,特别是在将同一组权限应用到几个对象的时候。为了控制记录的查看、创建、修改与删除操作,Kinto 可以在 Bucket、Group、Collection 与单个 Record 上定义权限。既然在 Bucket、Collection 与 Record 之间存在着继承的概念,因此 Kinto 考虑到了从父对象继承权限的问题。比如说,如果一个 Bucket 定义了一个权限,允许匿名用户读取,那么该 Bucket 中的每个 Collection 的每一条 Record 就都可以读取,这都是继承的结果。创建新对象的权限定义在父对象中。比如说,创建 Record 的权限定义在 Collection 中,创建 Collection 或是 Group 的权限定义在 Bucket 中。不过,创建新 Bucket 的权限则是通过服务器配置来控制的。

Kinto 的主要应用场景如下所示:

  • 为前端应用提供了通用的 Web 数据库
  • 构建带有细粒度权限控制的协作式应用
  • 可存储加密数据
  • 在不同设备间同步应用数据

值得一提的是,Kinto 目前在 Firefox 与 Firefox OS 上得到了广泛的应用,主要用于对设置与各种信息进行全局同步;此外,它还是浏览器扩展与 Web 应用中个人数据存储的首选解决方案。

Kinto 的主要特性如下所示:

  • 数据同步
  • 细粒度权限控制
  • JSON Schema 验证
  • 通用且多客户端支持
  • 开源、自托管
  • 良好的设计

Kinto 的亮点有:

  • 充分利用了 HTTP 最佳实践
  • 可插拔的认证机制
  • 可插拔的存储、缓存与权限支持
  • 可通过 INI 文件或是环境变量进行配置
  • 内建的监控支持
  • 缓存控制

双向的记录同步是个非常困难的事情。Kinto 走了一些捷径,它只对并发控制与变更轮询提供了一些基本保障手段,而且不会自动解决冲突问题。基本上,每个对象都有一个版本号,每次修改后该版本号都会增加。Kinto 并不会保存对象老的版本号。客户端可以获取到自某个特定的版本号以来记录集合所发生的变更列表,Kinto 还可以通过它防止对象的意外更新。Kinto 同步功能是由 Mozilla Firefox Sync 团队进行设计并开发的。

在开始构建自己的数据存储服务前,我们先来看看市场上已经存在的产品。Kinto 团队一开始的想法是使用并扩展已有的社区项目,并没有打算重新发明轮子。不过,经过了一些尝试后,团队发现既有的这些解决方案都无法很好地解决团队所面临的问题,比如说细粒度权限控制等。因此,团队基于开发 Firefox Sync 所积累的经验开始构建自己的数据存储服务。

下表展示了 Kinto 与市场上同类产品的功能比较,这有助于读者了解 Kinto 相对于其他竞品来说有哪些优势。

[1] 目前,Hoodie 的用户插件会自动让用户认证通过,不过他们正在解决这个问题。

[2] CouchDB 将 Map/Reduce 作为查询机制,这对于新人来说不太好理解。

[3] Remote Storage 可以对目录使用“ls”,不过内容项并不是排好序的,也没有分页。

[4] 对于冲突处理来说,Kinto 使用了与 Remote storage 相同的机制。

[5] Remote Storage 支持 OAuth2.0 Implicit Grant Flow。

[6] 对去中心化的发现支持在计划当中,不过尚未实现。

[7] Remote Storage 并未定义任何默认实现(因为它是个协议),不过可以通过 JavaScript 与 Node.js 轻松上手。

感兴趣的读者还可以通过这里了解到创建Kinto 背后的种种抉择与动机。

下面是关于Kinto 的一些FAQ,可以帮助读者更好地了解这款轻量级JSON 存储的设计原理与具体使用场景。

Kinto 可以对数据进行加密么?

Kinto 服务器会将传递过来的任何数据存储起来,无论数据是否加密都如此。我们认为加密应该是客户端做的事情,你可以通过我们提供的 Kinto.js 客户端轻松实现对数据的加密处理。

对于我所使用的操作系统来说,Kinto 是否提供了包下载工具?

没有,不过这个想法很不错。为几个平台维护包是一件非常耗时间的事情,况且我们现在还是个小团队。目前,你可以通过我们提供的 Makefile 或是 Dockerfile 轻松运行服务器。可以通过 pip 轻松安装 Kinto,在 Docker hub 也有镜像。不过,如果你愿意帮助我们在你所喜欢的操作系统上维护 Kinto 包,那么我们将万分感激!

为何会选择使用 Python 而不是其他语言?

我们喜欢 Python,因为它是门简洁且富于表现力的语言,同时又提供了强大的数据结构,而且易于学习。因此,开发团队选择了使用 Python。

此外,Mozilla 的运维团队也对在生产环境下部署和管理 Python 应用驾轻就熟。不过,Python 本身只是个实现细节而已。Kinto 是由 HTTP 协议定义的,可以使用任何语言实现。

可否在 Kinto 中存储文件?

现在还不行,不过我们已经设计了一个文件存储特性,现在正在实现中,预计将于明年发布。与此同时,如果想要尝试最新版,我们很期待你的反馈。

何为 Cliquet?Cliquet 与 Kinto 存在哪些差别?

Cliquet 是个用于设计微服务的工具集;Kinto 则是通过该工具集构建的服务器。

我遇到了 Exception 错误,哪里出错了呢?

可以通过 Troubleshooting 了解关于错误的详细信息。

感兴趣的读者可以尝试 Kinto,这里是 Kinto 的文档说明。

2015-12-22 02:303137
用户头像

发布了 88 篇内容, 共 269.6 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

戴尔赋能科创小企业,共塑科创大时代

科创人

全渠道CRM系统解决方案

低代码小观

低代码 CRM 客户关系管理 CRM系统 客户关系管理系统

​对 Jenkins 和 CloudBees CI 的 UI 改进

龙智—DevSecOps解决方案

CloudBees

游戏美术和设计师的福音,Helix DAM 测试版来了!

龙智—DevSecOps解决方案

perforce Helix DAM

关于数据一致性解决方案

穿过生命散发芬芳

数据一致性 5月月更

【国产】分布式批量作业调度平台TASKCTL产品验证的几种方式

敏捷调度TASKCTL

程序员 DevOps 分布式 ETL任务 自动化运维

Chrome Devtools调试小技巧

百度Geek说

后端

密钥管理系统-为你的天翼云资产上把“锁

天翼云开发者社区

数据 数据安全 密码管理

架构训练 模块五

小马

「架构实战营」

最佳实践 | 用腾讯云AI文字识别从0到1实现通信行程卡识别

牵着蜗牛去散步

腾讯 文字识别 技术实践 腾讯云AI 疫情防控

自助洗车怎么洗?来看看洗车教程

共享电单车厂家

自助洗车加盟 自助洗车怎么洗 自助洗车机使用

Spark离线开发框架设计与实现

百度Geek说

后端

2022 开源之夏 | Curve 邀你与中国存储软件共成长,赢万元奖金

网易数帆

分布式 云原生 存储 Ceph curve

技术干货| MongoDB时间序列集合

MongoDB中文社区

mongodb

案例成果展 | 一朵“航空云”为国航APP核心业务保驾护航

York

云原生 敏捷实践 应用现代化

Nebula Graph|信息图谱在携程酒店的应用

NebulaGraph

图数据库 知识图谱 NebulaGraph

自助洗车机投放在哪里比较好?

共享电单车厂家

自助洗车加盟 车白兔自助洗车 自助洗车机投放 自助洗车场地

6元自助洗车怎么加盟?有啥门槛

共享电单车厂家

自助洗车怎么加盟 6元自助洗车 自助洗车加盟门槛

突破疫情限制,WorkPlus助力企业打开远程高效办公新模式

BeeWorks

在nginx中使用proxy protocol协议

程序那些事

Java nginx 网络协议 程序那些事 5月月更

架构实战营作业五

热猫

Authing 宣布推出云原生「多租户」身份解决方案

Authing

身份云 数字化转型 SaaS 多租户

客户体验和客户服务的区别

龙国富

客户服务 客户体验管理

自助洗车机投放应该注意哪些问题?

共享电单车厂家

自助洗车加盟 自助洗车机投放 自助洗车场地

初识DevOps

天翼云开发者社区

DevOps 运维 前端开发

实战攻略:企业如何一步步建立自己的数字孪生

BeeWorks

直播可以使用 https 了,快来试试吧

CRMEB

前车之鉴:聊聊钉钉 Flutter 落地桌面端踩过的“坑” | Dutter

阿里巴巴终端技术

flutter 钉钉 移动端 跨端框架 桌面端

Klocwork 2022.1推出Kotlin分析引擎

龙智—DevSecOps解决方案

klocwork perforce

自助洗车机如何使用?其实很简单

共享电单车厂家

自助洗车加盟 自助洗车机使用

开源的轻量级JSON存储Kinto介绍_语言 & 开发_张龙_InfoQ精选文章