All Projects → heremaps → Flatdata

heremaps / Flatdata

Licence: apache-2.0
Write-once, read-many, minimal overhead binary structured file format.

Programming Languages

rust
11053 projects
python3
1442 projects
cpp
1120 projects

Projects that are alternatives of or similar to Flatdata

Depot.js
📦 depot.js is a storage library with a simple API
Stars: ✭ 247 (+104.13%)
Mutual labels:  serialization, storage
Prefser
Wrapper for Android SharedPreferences with object serialization and RxJava Observables
Stars: ✭ 228 (+88.43%)
Mutual labels:  serialization, storage
Store.js
Cross-browser storage for all use cases, used across the web.
Stars: ✭ 13,656 (+11185.95%)
Mutual labels:  serialization, storage
Binaryprefs
Rapidly fast and lightweight re-implementation of SharedPreferences which stores each preference in files separately, performs disk operations via NIO with memory mapped byte buffers and works IPC (between processes). Written from scratch.
Stars: ✭ 484 (+300%)
Mutual labels:  serialization, storage
Go Memdump
Very fast, very unsafe serialization for Go
Stars: ✭ 118 (-2.48%)
Mutual labels:  serialization
Typical
Typical: Fast, simple, & correct data-validation using Python 3 typing.
Stars: ✭ 111 (-8.26%)
Mutual labels:  serialization
Faraday
Serialization library built for speed and memory efficiency
Stars: ✭ 110 (-9.09%)
Mutual labels:  serialization
Electron Storage
Simply save/load json files to/from file system in electron applications
Stars: ✭ 109 (-9.92%)
Mutual labels:  storage
Dataclass factory
Modern way to convert python dataclasses or other objects to and from more common types like dicts or json-like structures
Stars: ✭ 116 (-4.13%)
Mutual labels:  serialization
Ston
STON - Smalltalk Object Notation - A lightweight text-based, human-readable data interchange format for class-based object-oriented languages like Smalltalk.
Stars: ✭ 119 (-1.65%)
Mutual labels:  serialization
File Storage
File storage abstraction for Yii2
Stars: ✭ 116 (-4.13%)
Mutual labels:  storage
Irmin
Built-in Snapshotting - backup and restore Storage Agnostic - you can use Irmin on top of your own storage layer Custom Datatypes - (de)serialization for custom data types, derivable via ppx_irmin Highly Portable - runs anywhere from Linux to web browsers and Xen unikernels Git Compatibility - irmin-git uses an on-disk format that can be inspected and modified using Git Dynamic Behavior - allows the users to define custom merge functions, use in-memory transactions (to keep track of reads as well as writes) and to define event-driven workflows using a notification mechanism
Stars: ✭ 1,524 (+1159.5%)
Mutual labels:  storage
React Native Emoticons
react native emoticons(表情), including emoji😁
Stars: ✭ 119 (-1.65%)
Mutual labels:  storage
Pretty Yaml
PyYAML-based module to produce pretty and readable YAML-serialized data
Stars: ✭ 110 (-9.09%)
Mutual labels:  serialization
Php Serialize
Use PHP's serialization methods from Ruby.
Stars: ✭ 119 (-1.65%)
Mutual labels:  serialization
Anexplorer
📁 Another Android Explorer ( File Manager ) is an All-in-One Open source file manager. AnExplorer File Manager (File Explorer) is designed for all android devices including Phones, Phablets, Tablets, Chromecast, Wear OS, Android TV and Chromebooks. It's a fully designed with Material guidelines by Google.
Stars: ✭ 1,505 (+1143.8%)
Mutual labels:  storage
Orion
[Moved to Gitlab] Easy to Use, Inter Planetary File System (IPFS) desktop client
Stars: ✭ 115 (-4.96%)
Mutual labels:  storage
Linux
The linux kernel source repository for Open-Channel SSDs
Stars: ✭ 119 (-1.65%)
Mutual labels:  storage
Symfony Jsonapi
JSON API Transformer Bundle for Symfony 2 and Symfony 3
Stars: ✭ 114 (-5.79%)
Mutual labels:  serialization
Ron
Rusty Object Notation
Stars: ✭ 1,834 (+1415.7%)
Mutual labels:  serialization

flatdata Build Status

Write-once, read-many, minimal overhead binary structured file format.

Flatdata is a library providing data structures for convenient creation, storage and access of packed memory-mappable structures with minimal overhead.

With flatdata, the user defines a schema of the data format using a very simple schema language that supports plain structs, vectors and multivectors. The schema is then used to generate builders and readers for serialization and deserialization of the data to an archive of files on disk.

The data is serialized in a portable way which allows zero-overhead random access to it by using memory mapped storage: the operating system facilities are used for loading, caching and paging of the data, and most important, accessing it as if it were in memory.

Why flatdata

Flatdata helps creating efficient read-only datasets:

  • Zero overhead random access
  • Support for bit and byte packing
  • Structuring data using a schema definition
  • Optimized for large read-only datasets
  • Portable, with support for multiple languages

Flatdata doesn't provide:

  • Backwards compatible schema evolution
  • Support for mutable datasets
  • Portable floating point serialization

For more details read why flatdata.

Using flatdata

Creating a schema

Define a flatdata archive:

namespace loc {
    struct Point {
        x : u32 : 32;
        y : u32 : 32;
    }
    archive Locations {
        pois : vector< Point >;
    }
}

The full schema documentation can be found here.

Generating a module

Flatdata relies on a generator that takes a flatdata schema file as an input and generates a module for one of the supported languages.

The following languages are supported:

  • First-class citizen implementations:
    • C++ - used extensively, tested excessively normally receives features first
    • Rust - the newest addition to the family
  • Read-only implementations:
    • Python - used mostly for inspecting the data
    • Dot - used to generate diagrams of the schema
    • Go - beta implementation

Generate code

See the generator's README for instructions.

License

Copyright (c) 2017-2020 HERE Europe B.V.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this document by you, as defined in the Apache-2.0 license, without any additional terms or conditions.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].