1# 2# micro_blob.py 3# 4# This source file is part of the FoundationDB open source project 5# 6# Copyright 2013-2018 Apple Inc. and the FoundationDB project authors 7# 8# Licensed under the Apache License, Version 2.0 (the "License"); 9# you may not use this file except in compliance with the License. 10# You may obtain a copy of the License at 11# 12# http://www.apache.org/licenses/LICENSE-2.0 13# 14# Unless required by applicable law or agreed to in writing, software 15# distributed under the License is distributed on an "AS IS" BASIS, 16# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17# See the License for the specific language governing permissions and 18# limitations under the License. 19# 20 21import fdb 22fdb.api_version(300) 23db = fdb.open() 24 25 26@fdb.transactional 27def clear_subspace(tr, subspace): 28 tr.clear_range_startswith(subspace.key()) 29 30 31CHUNK_LARGE = 5 32 33blob = fdb.Subspace(('B',)) 34 35 36@fdb.transactional 37def write_blob(tr, data): 38 if not len(data): 39 return 40 num_chunks = (len(data) + CHUNK_LARGE - 1) / CHUNK_LARGE 41 chunk_size = (len(data) + num_chunks) / num_chunks 42 chunks = [(n, n + chunk_size) for n in range(0, len(data), chunk_size)] 43 for start, end in chunks: 44 tr[blob[start]] = data[start:end] 45 46 47@fdb.transactional 48def read_blob(tr): 49 value = '' 50 for k, v in tr[blob.range()]: 51 value += v 52 return value 53 54 55clear_subspace(db, blob) 56write_blob(db, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') 57print read_blob(db) 58