Apache Avro 纯 JavaScript 实现 avsc

avsc 详细介绍

avsc 是 Apache Avro 的纯 JavaScript 实现。

特性:

完整的 Avro 架构支持,包括递归架构, sort order, 以及 schema evolution.

快速!速度相当于 JSON 的两倍,同时更少的编码(varies per schema).

无依赖, avsc 甚至可以在浏览器运行

表现:

解码吞吐率的示意图(越高越好):

库比较:

node-avsc, this package.

node-json, built-in JSON serializer.

node-pson, an alternative to JSON.

node-avro-io, most popular previously existing Avro implementation.

示例:

在一个 node.js 模块,或使用 browserify:

var avsc = require('avsc');
编码和解码对象:
    // We can declare a schema inline:var type = avsc.parse({
      name: 'Pet',
      type: 'record',
      fields: [
        {name: 'kind', type: {name: 'Kind', type: 'enum', symbols: ['CAT', 'DOG']}},
        {name: 'name', type: 'string'}
      ]
    });var pet = {kind: 'CAT', name: 'Albert'};var buf = type.toBuffer(pet); // Serialized object.var obj = type.fromBuffer(buf); // {kind: 'CAT', name: 'Albert'}
生成一个 schema 的随机实例:
    // We can also parse a JSON-stringified schema:
    var type = avsc.parse('{"type": "fixed", "name": "Id", "size": 4}');
    var id = type.random(); // E.g. Buffer([48, 152, 2, 123])
检查对象是否符合给定 schema:
    // Or we can specify a path to a schema file (not in the browser):
    var type = avsc.parse('./Person.avsc');
    var person = {name: 'Bob', address: {city: 'Cambridge', zip: '02139'}};
    var status = type.isValid(person); // Boolean status.
从一个 Avro 容器文件(不在浏览器)得到解码记录的readable stream:
    avsc.createFileDecoder('./records.avro')
      .on('metadata', function (type) { / `type` is the writer's type. / })
      .on('data', function (record) { / Do something with the record. / });

文章转载自 开源中国社区[https://www.oschina.net]

时间: 2024-11-03 15:19:34

Apache Avro 纯 JavaScript 实现 avsc的相关文章

Apache Avro:quick start快速开始及示例教程

本教程是参照Apache avro官网的quick start写的:http://avro.apache.org/docs/current/gettingstartedjava.html 1.下载avro-tools-1.7.5.jar http://mirrors.cnnic.cn/apache/avro/avro-1.7.5/java/ 2.使用avro-tools生成java代码 编写avro示例user.avrc {"namespace": "example.avro

纯javascript实现四方向文本无缝滚动效果

  本文主要给大家分享了使用纯javascript实现的可控制的四方向文本无缝滚动的代码,效果非常不错,有需要的小伙伴可以参考下. 实现一个文本无缝滚动的效果: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

纯JavaScript实现HTML5 Canvas六种特效滤镜示例

实现了六款简单常见HTML5 Canvas特效滤镜,并且封装成一个纯JavaScript可调用的API文件gloomyfishfilter.js,程序源代码如下,感兴趣的朋友可以参考下哈   小试牛刀,实现了六款简单常见HTML5 Canvas特效滤镜,并且封装成一个纯JavaScript可调用的API文件gloomyfishfilter.js.支持的特效滤镜分别为: 1.反色 2.灰色调 3.模糊 4.浮雕 5.雕刻 6.镜像 滤镜原理解释: 1.反色:获取一个像素点RGB值r, g, b则新

使用纯javascript实现经典扫雷游戏

  使用纯javascript实现经典扫雷游戏         本文给大家分享的是个人刚开始学习javascript的时候写的仿windows经典的扫雷游戏的代码,当时只是写了下来,没加注释,这里补上,有需要的小伙伴可以参考下. 很久以前写的 当时都没写注释的 刚加上了 (尼玛,好多自己都不认识了 ... ) 不足的地方就是本来想写个游戏排名的统计的,等有空了再加上(好像每次都这么说 然后就等好久好久...) 还有就是没有实现:点击第一个格子不能是雷的功能 ? 1 2 3 4 5 6 7 8 9

纯Javascript实现ping功能的方法

 这篇文章主要介绍了纯Javascript实现ping功能的方法,实例分析了javascript实现ping功能的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了纯Javascript实现ping功能的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

使用纯javascript实现放大镜效果

 本文给大家分享的是使用纯javascript实现放大镜效果的代码,并附上封装的步骤,做电商程序的小伙伴们一定不要错过.     jd或者淘宝的具体商品有个放大镜的效果.虽然网上类似插件琳琅满目,应用到项目上有诸多不便,自己抽点时间自己写了个类似插件,积累下代码,何乐而不为呢!!let'go: 打算把此特效封装成个插件,先把最基本的算法实现,然后再一步步封装吧: 最终实现效果: html 代码:   代码如下: <div id="Magnifier"></div>

纯javascript实现简单下拉刷新功能

 这篇文章主要介绍了纯javascript实现简单下拉刷新功能,没有借助任何的框架,十分简单实用,有需要的小伙伴来参考下吧.     代码很简单,实现的功能却很实用,直接奉上代码 CSS:   代码如下: <meta charset="utf-8" /> <title>Pull to Refresh</title> <meta name="viewport" content="width=device-width,

纯JavaScript 实现flappy bird小游戏实例代码_javascript技巧

前言: <flappy bird>是一款由来自越南的独立游戏开发者Dong Nguyen所开发的作品,游戏于2013年5月24日上线,并在2014年2月突然暴红.2014年2月,<Flappy Bird>被开发者本人从苹果及谷歌应用商店撤下.2014年8月份正式回归APP STORE,正式加入Flappy迷们期待已久的多人对战模式.游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍. 正文: 接下来就是一步一步来实现它 步骤1:页面布局,这儿就不多说了,页面内容如下:

用纯Javascript打造类似NodeJS的模块载入系统

用纯Javascript打造类似NodeJS的模块载入系统2011-11-15 18:35:46     我来说两句      收藏    我要投稿  http://www.2cto.com/kf/201111/111190.html   NodeJS的模块系统有两个重要的特点:   1. 模块中直接用var定义的变量是仅作用与当前模块的,而不是全局.   2. 每个模块中都可以使用require和module这两个"全局变量".之所以打上引号,因为它们其实是每个模块都有的通用实例,不