3 Star 0 Fork 0

Gitee 极速下载 / dimbin

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/alibaba/dimbin
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

DIMBIN

High-performance serialization for multi-dimension arrays

针对大量数据网络传输设计的序列化方案,用于储存多维数组

通过直接内存操作实现高于 JSON 多个数量级的性能和更小的传输体积

《序列化方案选型建议》

Useage

C#

see ./csharp

javascript

npm install --save dimbin

import DIMBIN from 'dimbin' // v3

// import DIMBIN from 'dimbin/v2' // old version
const data = [
    [0, 1, 2, 3], // 普通数值数组 ✅
    new Int16Array([1, 2, 3, 4]), // TypedArray ✅
    [
        // 更高维度数组 ✅
        [0, 1, 2],
        [0, 1, 2, 3, 4],
    ],
    DIMBIN.stringsSerialize(['a', 'bc', '😊']), // Array<string>
    DIMBIN.booleansSerialize([true, false, true, true]), // Array<boolean>
]

// 序列化为ArrayBuffer
const bin = DIMBIN.serialize(data)

// 反序列化为 Array<TypedArray>
const dim = DIMBIN.parse(bin)
dim[3] = DIMBIN.stringsParse(dim[3])
dim[4] = DIMBIN.booleansParse(dim[4])

/*
[
    Float32Array{0, 1, 2, 3},
    Int16Array{1, 2, 3, 4},
    [
        Float32Array{0, 1, 2},
        Float32Array{0, 1, 2, 3, 4},
    ],
    ['a', 'bc', '😊'],
    [true, false, true, true]
]
*/

数据结构

DIMBIN 为多维数组而设计, 因此传入的数据结构必须为多维数组, 数组维数没有上限, 每一维度数组的元素个数上线为 2^32 . 维度和数组元素个数受运行环境和设备限制.

// 粒子 🌰

// 正确的格式
const input = [
    // Array
    [1, 2, 3],
    // TypedArray
    new Float32Array(1000),
    // higher dimensions
    [
        //
        [4, 5, 6],
        new Float64Array(2000),
    ],
]

const wrong1 = [
    // 必须为多维数组
    1,
    2,
    3,
]

const wrong2 = [
    // - 数组元素必须 *全部为数组* 或者 *全部为数值*
    [1, 2, 3, [4], [5]],
]

const wrong3 = [
    // 非数值数据需要先转换为数值数据
    ['123', 'hello'],
]

数组的元素支持以下数据类型

  • number: Int8, UInt8, Int16, UInt16, Int32, UInt32, Float32, Float64
  • string
  • boolean

默认情况下, 所有的数据将使用 Float32 格式进行保存. 如果需要指定数据格式, 请先转换成 TypedArray. 如需要处理字符串和布尔值, 请使用对应的接口预先转换成 TypedArray.

API

C#

see ./csharp

javascript

serialize

序列化为二进制数据

  • @param {Array<TypedArray|Array<number|TypedArray|Array>>} data 多维数组
  • @param {float} magicNumber 用户控制的标识位
  • @return {ArrayBuffer}

parse

反序列化回多维数组

  • @param {ArrayBuffer|Buffer|DataView} buffer 序列化后的二进制数据
  • @return {Array<TypedArray|Array<TypedArray|Array>>}

getMeta

读取二进制数据的元数据

  • @param {ArrayBuffer|Buffer|DataView} buffer 序列化后的二进制数据
  • @return {Meta}
interface Meta {
    version: number
    magic_num: number
    seg_meta_bytes: number
    seg_meta_start: number
    len: number
    big_endian: boolean
}

stringsSerialize

将 Array 序列化成 TypedArray

  • @param {string[]} strs 元素为字符串的数组
  • @return {UInt8Array} 序列化后的二进制数据

stringsParse

将 stringsSerialize 生成的二进制数据解析回 Array

  • @param {UInt8Array} 序列化后的二进制数据
  • @return {string[]} 元素为字符串的数组

booleansSerialize

将 Array 序列化成 TypedArray

  • @param {boolean[]} strs 元素为布尔值的数组
  • @return {UInt8Array} 序列化后的二进制数据

booleansParse

将 booleansSerialize 生成的二进制数据解析回 Array

  • @param {UInt8Array} 序列化后的二进制数据
  • @return {boolean[]} 元素为布尔值的数组

Performance

JS 环境下:当使用纯数值数据

  • 序列化性能为 JSON 的 3-10 倍
  • 反序列化性能为 JSON 的 十万到百万 倍
  • 体积比 JSON 减小 60%

在 JS 环境中, 性能高于 flatbuffers 30%~100%, 远高于 protocolbuffers.

详细 benchmark 以及与 JSON / ProtocolBuffers / FlatBuffer 的对比与选型建议 >>>

序列化方案选型对比

Development

npm install

npm start

open http://localhost:3112/html/api in your browser.

npm test

npm run dist

Specifications

specifications/v3.md

MIT License Copyright (c) 2017 Alibaba Group Holding Limited Copyright (c) 2017 Simon (gaomeng1900@gmail.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

dimbin,是针对大量数据网络传输设计的序列化方案,用于储存多维数组通过直接内存操作实现高于 JSON 多个数量级的性能和更小的传输体积 展开 收起
TypeScript 等 3 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
TypeScript
1
https://gitee.com/mirrors/dimbin.git
git@gitee.com:mirrors/dimbin.git
mirrors
dimbin
dimbin
master

搜索帮助