blob: 5a85717cfd50459509c5758d55d3fccd781253b8 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<meta charset="UTF-8" />
<title>SMILA/Project Concepts/Binary Storage - Eclipsepedia</title>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<meta name="generator" content="MediaWiki 1.23.2" />
<link rel="shortcut icon" href="http://wiki.eclipse.org/eclipse.org-common/themes/solstice/public/images/favicon.ico" />
<link rel="search" type="application/opensearchdescription+xml" href="http://wiki.eclipse.org/opensearch_desc.php" title="Eclipsepedia (en)" />
<link rel="EditURI" type="application/rsd+xml" href="http://wiki.eclipse.org/api.php?action=rsd" />
<link rel="alternate" type="application/atom+xml" title="Eclipsepedia Atom feed" href="http://wiki.eclipse.org/index.php?title=Special:RecentChanges&amp;feed=atom" />
<link rel="stylesheet" href="http://wiki.eclipse.org/load.php?debug=false&amp;lang=en&amp;modules=mediawiki.legacy.commonPrint%2Cshared%7Cmediawiki.ui.button&amp;only=styles&amp;skin=solstice&amp;*" />
<link rel="stylesheet" href="http://wiki.eclipse.org/skins/solstice/public/stylesheets/styles.min.css?303" media="screen, print" /><meta name="ResourceLoaderDynamicStyles" content="" />
<style>a:lang(ar),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}
/* cache key: my_wiki:resourceloader:filter:minify-css:7:14ece53a42aa314864e5fd8c57f0d98f */</style>
<script src="http://wiki.eclipse.org/load.php?debug=false&amp;lang=en&amp;modules=startup&amp;only=scripts&amp;skin=solstice&amp;*"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"SMILA/Project_Concepts/Binary_Storage","wgTitle":"SMILA/Project Concepts/Binary Storage","wgCurRevisionId":129000,"wgRevisionId":129000,"wgArticleId":16278,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["SMILA"],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"SMILA/Project_Concepts/Binary_Storage","wgIsProbablyEditable":false,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgWikiEditorEnabledModules":{"toolbar":false,"dialogs":false,"hidesig":true,"preview":false,"previewDialog":false,"publish":false},"wgCategoryTreePageCategoryOptions":"{\"mode\":0,\"hideprefix\":20,\"showcount\":true,\"namespaces\":false}"});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function($,jQuery){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"editfont":"default","editondblclick":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":1,"extendwatchlist":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nickname":"","norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"rcdays":7,"rclimit":50,"rows":25,"showhiddencats":0,"shownumberswatching":1,"showtoolbar":1,"skin":"solstice","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":1,"watchdefault":1,"watchdeletion":0,"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,
"useeditwarning":1,"prefershttps":1,"language":"en","variant-gan":"gan","variant-iu":"iu","variant-kk":"kk","variant-ku":"ku","variant-shi":"shi","variant-sr":"sr","variant-tg":"tg","variant-uz":"uz","variant-zh":"zh","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"variant":"en"});},{},{});mw.loader.implement("user.tokens",function($,jQuery){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});},{},{});
/* cache key: my_wiki:resourceloader:filter:minify-js:7:70d74423d3fc1e1c18fa9a1ff645a84a */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-java {line-height: normal;}
.source-java li, .source-java pre {
line-height: normal; border: 0px none white;
}
/**
* GeSHi Dynamically Generated Stylesheet
* --------------------------------------
* Dynamically generated stylesheet for java
* CSS class: source-java, CSS id:
* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
* (http://qbnz.com/highlighter/ and http://geshi.org/)
* --------------------------------------
*/
.java.source-java .de1, .java.source-java .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.java.source-java {font-family:monospace;}
.java.source-java .imp {font-weight: bold; color: red;}
.java.source-java li, .java.source-java .li1 {font-weight: normal; vertical-align:top;}
.java.source-java .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.java.source-java .li2 {font-weight: bold; vertical-align:top;}
.java.source-java .kw1 {color: #7F0055; font-weight: bold;}
.java.source-java .kw2 {color: #7F0055; font-weight: bold;}
.java.source-java .kw3 {color: #000000; font-weight: normal}
.java.source-java .kw4 {color: #7F0055; font-weight: bold;}
.java.source-java .co1 {color: #3F7F5F; font-style: italic;}
.java.source-java .co2 {color: #3F7F5F;}
.java.source-java .co3 {color: #3F7F5F; font-style: italic; font-weight: bold;}
.java.source-java .coMULTI {color: #3F5FBF; font-style: italic;}
.java.source-java .es0 {color: #000000;}
.java.source-java .br0 {color: #000000;}
.java.source-java .sy0 {color: #000000;}
.java.source-java .st0 {color: #2A00ff;}
.java.source-java .nu0 {color: #000000;}
.java.source-java .me1 {color: #000000;}
.java.source-java .me2 {color: #000000;}
.java.source-java .ln-xtra, .java.source-java li.ln-xtra, .java.source-java div.ln-xtra {background-color: #ffc;}
.java.source-java span.xtra { display:block; }
/*]]>*/
</style><meta name="viewport" content="width=device-width, initial-scale=1.0"></head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-SMILA_Project_Concepts_Binary_Storage skin-solstice action-view" id="solstice">
<a class="sr-only" href="Binary_Storage.html#content">Skip to main content</a>
<div class="thin-header">
<header role="banner" class="hidden-print noprint">
<div class="container-fluid">
<div id="row-logo-search">
<div id="header-left">
<div class="row">
<div class="hidden-xs col-sm-6 logo-container">
<a href="https://www.eclipse.org/" ><img class="logo-eclipse-default" src="http://wiki.eclipse.org/skins/solstice/public/images/logo/eclipse-800x188.png" alt="Eclipsepedia"></a>
</div>
<div class="navbar col-sm-18 yamm" id="main-menu">
<div class="navbar-collapse collapse" id="navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a target="_self" href="https://eclipse.org/downloads/">Download</a></li>
<li><a target="_self" href="https://eclipse.org/users/">Getting Started </a></li>
<li><a target="_self" href="https://eclipse.org/membership/">Members</a></li>
<li><a target="_self" href="https://eclipse.org/projects/">Projects</a></li>
<li class="dropdown visible-xs"><a class="dropdown-toggle" data-toggle="dropdown" href="Binary_Storage.html#">Community <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="http://marketplace.eclipse.org">Marketplace</a></li><li><a href="http://events.eclipse.org">Events</a></li><li><a href="http://www.planeteclipse.org/">Planet Eclipse</a></li><li><a href="https://eclipse.org/community/eclipse_newsletter/">Newsletter</a></li><li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li></ul></li><li class="dropdown visible-xs"><a class="dropdown-toggle" data-toggle="dropdown" href="Binary_Storage.html#">Participate <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li><li><a href="https://eclipse.org/forums/">Forums</a></li><li><a href="https://eclipse.org/mail/">Mailing Lists</a></li><li><a href="https://wiki.eclipse.org/">Wiki</a></li><li><a href="https://wiki.eclipse.org/IRC">IRC</a></li><li><a href="https://eclipse.org/contribute/">How to Contribute</a></li></ul></li><li class="dropdown visible-xs"><a class="dropdown-toggle" data-toggle="dropdown" href="Binary_Storage.html#">Working Groups <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="http://wiki.eclipse.org/Auto_IWG">Automotive</a></li><li><a href="http://iot.eclipse.org">Internet of Things</a></li><li><a href="http://locationtech.org">LocationTech</a></li><li><a href="http://lts.eclipse.org">Long-Term Support</a></li><li><a href="http://polarsys.org">PolarSys</a></li><li><a href="http://science.eclipse.org">Science</a></li><li><a href="http://openmdm.org">OpenMDM</a></li></ul></li><!-- More -->
<li class="dropdown hidden-xs"><a class="dropdown-toggle" data-toggle="dropdown">More<b class="caret"></b></a>
<ul class="dropdown-menu">
<li>
<!-- Content container to add padding -->
<div class="yamm-content">
<div class="row">
<ul class="col-sm-8 list-unstyled"><li><p><strong>Community</strong></p></li><li><a href="http://marketplace.eclipse.org">Marketplace</a></li><li><a href="http://events.eclipse.org">Events</a></li><li><a href="http://www.planeteclipse.org/">Planet Eclipse</a></li><li><a href="https://eclipse.org/community/eclipse_newsletter/">Newsletter</a></li><li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li></ul><ul class="col-sm-8 list-unstyled"><li><p><strong>Participate</strong></p></li><li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li><li><a href="https://eclipse.org/forums/">Forums</a></li><li><a href="https://eclipse.org/mail/">Mailing Lists</a></li><li><a href="https://wiki.eclipse.org/">Wiki</a></li><li><a href="https://wiki.eclipse.org/IRC">IRC</a></li><li><a href="https://eclipse.org/contribute/">How to Contribute</a></li></ul><ul class="col-sm-8 list-unstyled"><li><p><strong>Working Groups</strong></p></li><li><a href="http://wiki.eclipse.org/Auto_IWG">Automotive</a></li><li><a href="http://iot.eclipse.org">Internet of Things</a></li><li><a href="http://locationtech.org">LocationTech</a></li><li><a href="http://lts.eclipse.org">Long-Term Support</a></li><li><a href="http://polarsys.org">PolarSys</a></li><li><a href="http://science.eclipse.org">Science</a></li><li><a href="http://openmdm.org">OpenMDM</a></li></ul> </div>
</div>
</li>
</ul>
</li>
</ul>
</div>
<div class="navbar-header">
<button data-target="#navbar-collapse-1" data-toggle="collapse" class="navbar-toggle" type="button">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="https://www.eclipse.org/" class="visible-xs navbar-brand"><img class="logo-eclipse-default" src="http://wiki.eclipse.org/skins/solstice/public/images/logo/eclipse-800x188.png" alt="Eclipsepedia" width="174"></a>
</div>
</div>
</div>
</div>
</div>
</div>
</header>
<section class="defaut-breadcrumbs hidden-print noprint hidden-print clearfix" id="breadcrumb">
<div>
<ol class="breadcrumb">
<li><a href="https://www.eclipse.org/">Home</a></li>
<li><a href="http://wiki.eclipse.org/Main_Page">Eclipse Wiki</a></li>
<li class="active">SMILA/Project Concepts/Binary Storage</li></ol>
</div>
</section>
</div>
<div class="toolbar-menu breadcrumbs-offset noprint hidden-print margin-bottom-0 clearfix">
<div class="col-md-24">
<ol class="breadcrumb" role="navigation">
<li id="pt-login">
<a href="http://wiki.eclipse.org/index.php?title=Special:UserLogin&amp;returnto=SMILA%2FProject+Concepts%2FBinary+Storage">
<i class="fa fa-sign-in fa-fw orange"></i> Log in </a>
</li>
</ul>
</div>
</div>
<main role="main" class="background-grey">
<div class="container-full padding-top-25">
<!-- content -->
<section id="content" class="mw-body container-full clearfix 0">
<div id="mw-js-message" style="display:none;"></div>
<!-- bodyContent -->
<div id="bodyContent">
<!-- jumpto -->
<div id="jump-to-nav" class="mw-jump">
Jump to: <a href="Binary_Storage.html#mw-head">navigation</a>,
<a href="Binary_Storage.html#p-search">search</a>
</div>
<!-- /jumpto -->
<!-- leftcol -->
<aside class="col-md-4 noprint hidden-print" id="leftcol">
<form class="input-group" role="form" id="form-eclipse-search" action="http://wiki.eclipse.org/index.php" id="searchform">
<input id="searchInput" class="search-query form-control" type="search" accesskey="f" title="Special:Search" placeholder="Search" name="search" value="">
<span class="input-group-btn">
<button value="search" id="mw-searchButton" type="submit" class="btn btn-default" title="Search the pages for this text" name="fulltext">
<i class="fa fa-search"></i>
</button>
</span>
</form>
<select class="form-control margin-top-10 margin-bottom-10 visible-xs visible-sm" onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);"><option class="fw-700 "><span class="fw-700">---Navigation---</span></option><option value="/Main_Page">Main Page</option><option value="/Eclipsepedia:Community_portal">Community portal</option><option value="/Eclipsepedia:Current_events">Current events</option><option value="/Special:RecentChanges">Recent changes</option><option value="/Special:Random">Random page</option><option value="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents">Help</option></select><ul class="ul-left-nav fa-ul hidden-print leftnav hidden-xs hidden-sm"><li class="separator"><span class="separator">Navigation</span></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Main_Page" id="n-mainpage" title="Visit the main page [z]" accesskey="z">Main Page</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Eclipsepedia:Community_portal" id="n-portal" title="About the project, what you can do, where to find things">Community portal</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Eclipsepedia:Current_events" id="n-currentevents" title="Find background information on current events">Current events</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:RecentChanges" id="n-recentchanges" title="A list of recent changes in the wiki [r]" accesskey="r">Recent changes</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:Random" id="n-randompage" title="Load a random page [x]" accesskey="x">Random page</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents" id="n-help" title="The place to find out">Help</a></li></ul> <select class="form-control margin-top-10 margin-bottom-10 visible-xs visible-sm" onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);"><option class="fw-700 "><span class="fw-700">---Toolbox---</span></option><option value="/index.php?title=SMILA/Project_Concepts/Binary_Storage&amp;action=info">Page information</option><option value="/index.php?title=SMILA/Project_Concepts/Binary_Storage&amp;oldid=129000">Permanent link</option><option value="/index.php?title=SMILA/Project_Concepts/Binary_Storage&amp;printable=yes">Printable version</option><option value="/Special:SpecialPages">Special pages</option><option value="/Special:RecentChangesLinked/SMILA/Project_Concepts/Binary_Storage">Related changes</option><option value="/Special:WhatLinksHere/SMILA/Project_Concepts/Binary_Storage">What links here</option></select><ul class="ul-left-nav fa-ul hidden-print leftnav hidden-xs hidden-sm"><li class="separator"><span class="separator">Toolbox</span></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Binary_Storage&amp;action=info" id="t-info">Page information</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Binary_Storage&amp;oldid=129000" id="t-permalink" title="Permanent link to this revision of the page">Permanent link</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Binary_Storage&amp;printable=yes" id="t-print" rel="alternate" title="Printable version of this page [p]" accesskey="p">Printable version</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:SpecialPages" id="t-specialpages" title="A list of all special pages [q]" accesskey="q">Special pages</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:RecentChangesLinked/SMILA/Project_Concepts/Binary_Storage" id="t-recentchangeslinked" title="Recent changes in pages linked from this page [k]" accesskey="k">Related changes</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:WhatLinksHere/SMILA/Project_Concepts/Binary_Storage" id="t-whatlinkshere" title="A list of all wiki pages that link here [j]" accesskey="j">What links here</a></li></ul> </aside>
<!-- /leftcol -->
<!-- mainContent -->
<div id="mainContent" class="col-md-20">
<ul class="nav nav-tabs noprint hidden-print" role="tablist">
<li id="ca-nstab-main" class="active"><a href="Binary_Storage.html" title="View the content page [c]" accesskey="c" tabindex="-1">Page</a></li>
<li id="ca-talk" class="new"><a href="http://wiki.eclipse.org/index.php?title=Talk:SMILA/Project_Concepts/Binary_Storage&amp;action=edit&amp;redlink=1" title="Discussion about the content page [t]" accesskey="t" tabindex="-1">Discussion</a></li>
<li id="ca-viewsource"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Binary_Storage&amp;action=edit" title="This page is protected.&#10;You can view its source [e]" accesskey="e" tabindex="-1">View source</a></li>
<li id="ca-history" class="collapsible"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Binary_Storage&amp;action=history" title="Past revisions of this page [h]" accesskey="h" tabindex="-1">History</a></li>
</ul> <div class="tab-content background-white">
<div id="tab-pane-main-page-content" class="tab-pane active">
<h1 id="firstHeading" class="firstHeading page-header">
<span dir="auto">SMILA/Project Concepts/Binary Storage</span>
</h1>
<div id="main-page-content">
<!-- subtitle -->
<div id="contentSub" class="alert alert-small alert-warning"><span class="subpages">&lt; <a href="../../SMILA.html" title="SMILA">SMILA</a>&lrm; | <a href="../Project_Concepts.1.html" title="SMILA/Project Concepts">Project Concepts</a></span></div>
<!-- /subtitle -->
<div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="Binary_Storage.html#Overview"><span class="tocnumber">1</span> <span class="toctext">Overview</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="Binary_Storage.html#Description"><span class="tocnumber">2</span> <span class="toctext">Description</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="Binary_Storage.html#Storage_Mechanism_Internal_Structure."><span class="tocnumber">3</span> <span class="toctext">Storage Mechanism Internal Structure.</span></a>
<ul>
<li class="toclevel-2 tocsection-4"><a href="Binary_Storage.html#A._File_System"><span class="tocnumber">3.1</span> <span class="toctext">A. File System</span></a></li>
<li class="toclevel-2 tocsection-5"><a href="Binary_Storage.html#I._Local_hard_drive"><span class="tocnumber">3.2</span> <span class="toctext">I. Local hard drive</span></a>
<ul>
<li class="toclevel-3 tocsection-6"><a href="Binary_Storage.html#1._Flat_structure"><span class="tocnumber">3.2.1</span> <span class="toctext">1. Flat structure</span></a></li>
<li class="toclevel-3 tocsection-7"><a href="Binary_Storage.html#2._Hierarchical_structure_.28configurable_tree.29"><span class="tocnumber">3.2.2</span> <span class="toctext">2. Hierarchical structure (configurable tree)</span></a>
<ul>
<li class="toclevel-4 tocsection-8"><a href="Binary_Storage.html#Hierarchical_structure_nomenclature._Test_scenario"><span class="tocnumber">3.2.2.1</span> <span class="toctext">Hierarchical structure nomenclature. Test scenario</span></a></li>
</ul>
</li>
<li class="toclevel-3 tocsection-9"><a href="Binary_Storage.html#3._Hierarchical_structure_.28deterministically_calculation.29"><span class="tocnumber">3.2.3</span> <span class="toctext">3. Hierarchical structure (deterministically calculation)</span></a></li>
<li class="toclevel-3 tocsection-10"><a href="Binary_Storage.html#Analyze_of_hierarchical_structure"><span class="tocnumber">3.2.4</span> <span class="toctext">Analyze of hierarchical structure</span></a></li>
</ul>
</li>
<li class="toclevel-2 tocsection-11"><a href="Binary_Storage.html#II._Distributed_file_system_.28SFTP.2C_FTP.29"><span class="tocnumber">3.3</span> <span class="toctext">II. Distributed file system (SFTP, FTP)</span></a>
<ul>
<li class="toclevel-3 tocsection-12"><a href="Binary_Storage.html#1._Flat_structure_2"><span class="tocnumber">3.3.1</span> <span class="toctext">1. Flat structure</span></a></li>
<li class="toclevel-3 tocsection-13"><a href="Binary_Storage.html#2._Hierarchical_structure_.28configurable_tree.29_2"><span class="tocnumber">3.3.2</span> <span class="toctext">2. Hierarchical structure (configurable tree)</span></a></li>
<li class="toclevel-3 tocsection-14"><a href="Binary_Storage.html#3._Hierarchical_structure_.28deterministically_calculation.29_2"><span class="tocnumber">3.3.3</span> <span class="toctext">3. Hierarchical structure (deterministically calculation)</span></a></li>
</ul>
</li>
<li class="toclevel-2 tocsection-15"><a href="Binary_Storage.html#B._RDBMS"><span class="tocnumber">3.4</span> <span class="toctext">B. RDBMS</span></a></li>
<li class="toclevel-2 tocsection-16"><a href="Binary_Storage.html#C._Object_DataBase"><span class="tocnumber">3.5</span> <span class="toctext">C. Object DataBase</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-17"><a href="Binary_Storage.html#Cluster_configuration"><span class="tocnumber">4</span> <span class="toctext">Cluster configuration</span></a></li>
<li class="toclevel-1 tocsection-18"><a href="Binary_Storage.html#Concurrent_access"><span class="tocnumber">5</span> <span class="toctext">Concurrent access</span></a></li>
<li class="toclevel-1 tocsection-19"><a href="Binary_Storage.html#Technical_aspects_for_designing_the_Binary_Storage_Service"><span class="tocnumber">6</span> <span class="toctext">Technical aspects for designing the Binary Storage Service</span></a></li>
<li class="toclevel-1 tocsection-20"><a href="Binary_Storage.html#UML_Class_Diagram"><span class="tocnumber">7</span> <span class="toctext">UML Class Diagram</span></a></li>
<li class="toclevel-1 tocsection-21"><a href="Binary_Storage.html#Test_Results"><span class="tocnumber">8</span> <span class="toctext">Test Results</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="Overview">Overview</span></h2>
<p>Design a service to easy store / access binary data documents.
</p>
<h2><span class="mw-headline" id="Description">Description</span></h2>
<p>Client components will access the Binary Storage Service for persisting binary data (attachments) into the binary storage. The binary data shall be simply identified by a unique key / identifier as a String data type. No directly client component access to the persistence storage shall be available; the persistence storage will be only accessible through the Binary Storage Service API which provides the needed CRUD operations.
</p><p>Backend mechanism of Binary Storage shall be completely transparent to the client, thus user shall have the opportunity to setup basic configuration of the service. Binary Storage shall be able to determine and use default/optimistic configuration in case no one is specified by the user.
</p>
<h2><span class="mw-headline" id="Storage_Mechanism_Internal_Structure.">Storage Mechanism Internal Structure.</span></h2>
<p>Binary Storage will depend on the amount of data it needs to persist/manage. Because of this the persistence storage of service shall be able to deal with fallowing persistence structures/techniques, depending on service configuration:
</p>
<ul>
<li> A. File System
<ul>
<li> I. Local hard drive
<ul>
<li> 1. Flat structure
</li>
<li> 2. Hierarchical structure (configurable tree)
</li>
<li> 3. Hierarchical structure (deterministically calculation)
</li>
<li> Analyze of hierarchical structure
</li>
</ul>
</li>
<li> II. Distributed file system (SFTP, FTP)
<ul>
<li> 1. Flat structure
</li>
<li> 2. Hierarchical structure (configurable tree)
</li>
<li> 3. Hierarchical structure (deterministically calculation)
</li>
</ul>
</li>
</ul>
</li>
<li> B. RDBMS
</li>
<li> C. Object DataBase (ODBMS)
</li>
</ul>
<p>One of the persistence options will be used by the Binary Storage Service at the running time. Internally, the DAO &amp; DAO Factory concept provides the appropriate/configured persistence option implementation to the Binary Storage Service independently. User can shall configure its appropriate persistence option that satisfies his/her needs.
</p><p><a href="http://wiki.eclipse.org/File:SMILA-BinaryStorage-HighLevel.jpg" class="image"><img alt="SMILA-BinaryStorage-HighLevel.jpg" src="http://wiki.eclipse.org/images/9/90/SMILA-BinaryStorage-HighLevel.jpg" width="736" height="727" /></a>
</p>
<h3><span class="mw-headline" id="A._File_System">A. File System</span></h3>
<p>Binary Storage Service saves the binary data directly in the file system.
</p>
<h3><span class="mw-headline" id="I._Local_hard_drive">I. Local hard drive</span></h3>
<p>The service saves data in the local drive using a predefined persistence storage location - binary.storage.root.path. Under this root path Binary Storage will create its files system structures flat or hierarchical, depending on the configuration.
</p>
<h4><span class="mw-headline" id="1._Flat_structure">1. Flat structure</span></h4>
<p>The file system - flat structure configuration shall be used in case of small amount of data, since all the attachments will be saved in the same path location. For huge amount of data the systems becomes very slow, time responding increases significantly.
</p><p>This option shall only be used for debugging purpose, since it offers an easy way for locating a specific persisted attachment.
</p><p>In case of no initial configuration is provided by the user, the file system - flat structure option shall not be used as default.
</p><p><a href="http://wiki.eclipse.org/File:SMILA-BinaryStorage-Flat.jpg" class="image"><img alt="SMILA-BinaryStorage-Flat.jpg" src="http://wiki.eclipse.org/images/9/99/SMILA-BinaryStorage-Flat.jpg" width="566" height="172" /></a>
</p>
<h4><span class="mw-headline" id="2._Hierarchical_structure_.28configurable_tree.29">2. Hierarchical structure (configurable tree)</span></h4>
<p>Through the hierarchical file system persistence, Binary Storage Service will manage by itself a configurable &amp; hierarchically &amp; internal structure under the configured persistence storage root path. This is to be considered the default configuration.
Following parameters are available for configuring the hierarchical structure:
</p>
<ul>
<li> q - Maximum number of subfolders per folder
</li>
<li> r - Maximum number of persisted attachments per folder
</li>
</ul>
<p>The hierarchical (tree) structure is being created during the the storage of new data (the initial number of binary data which is going to be persisted is unknown for Binary Storage Service).
</p><p><i>The configurable tree - hierarchic structure algorithm, will not be based on the B-Tree structure since it will get modified very often because of the deleting/inserting records operations (this is specific for b-tree delete/insert operations), so the b-tree structure needs to be update (like moving up in the hierarchy of some leaf-records) in order to keep the tree height balanced. Depending on the level of the b-tree, these "moving/migrating operations" could consist in large operations (which involves the number of records that need to be moved and the size of these records). For example inserting/deleting of simple record needs to re-balance the b-tree structure by moving very large records in a distributed file system.</i>
</p>
<h5><span class="mw-headline" id="Hierarchical_structure_nomenclature._Test_scenario">Hierarchical structure nomenclature. Test scenario</span></h5>
<p>Fallowing picture outlines the hierarchic overview, file system nomenclature and binary data distribution (persistence) inside the tree structure. In the illustrated sample , our test scenario uses a total number of attachments to be stored 360. The configuration values are&#160;:
</p>
<pre>q = 3 (maximum 3 subfolders per folder in the hierarchy)
r = 10 (maximum 10 files stored in a folder inside of the hierarchic structure)
t = 360 (total number of attachments-files to be stored)
</pre>
<p>As it is outlined in the picture, the total number of subfolders from hierarchy structure represents a geometric progression (in mathematics also known as a geometric sequence), where each term (number of folders from the same level of the hierarchy) after the first is found by multiplying the previous one by a fixed non-zero number called the common ratio. The common ration identifies with maximum number of sub-folders per folder - q.
</p><p>For a optimistic hierarchy, it is possible to determine fallowing parameters in order to configure the hierarchy as user expects:
</p>
<ul>
<li> total number of folders from structure (t/r) - 36
</li>
<li> total number of subfolder at each level from the structure - Bn formula. (b1= 1 folder at the first level; b2=3 folders at the second level; b3=9 folders at the third level; b4=23 folders at the fourth level)
</li>
<li> total number of subfolders from the hierarchy (in full mode) - Sn formula
</li>
<li> total number of subfolders from the deepest level&#160;: 23 folders, Bn' = Bn - (Sn - t/r). (Bn=27; Sn=40; t/r=36)
</li>
<li> hierarchy level - n=4 (logarithmical function)
</li>
</ul>
<p><a href="http://wiki.eclipse.org/File:SMILA-BinaryStorage-Hierarchical.jpg" class="image"><img alt="SMILA-BinaryStorage-Hierarchical.jpg" src="http://wiki.eclipse.org/images/5/5d/SMILA-BinaryStorage-Hierarchical.jpg" width="1020" height="755" /></a>
</p><p>Binary Storage Service has to map each attachment identifier to the path where the binary data is being stored. The mappings needs to be persisted so they can be reused if the system gets restarted.
</p><p>An external manipulation of persistence storage structure (like deleting data form inside of it) will break the mappings. This is considered an exceptional case and it is not in the Binary Storage Service scope.
</p><p>Fallowing table provides an overview of the hierarchical structure based on configured parameters:
</p>
<table border="1">
<tr>
<th style="background-color: #eeeeee; width:12%"> t (number of attachments)
</th>
<th style="background-color: #eeeeee;width:12%"> q (max number of subfolders in folder)
</th>
<th style="background-color: #eeeeee;width:12%"> r (max number of att.in folder)
</th>
<th style="width:12%"> TF (number of folders)
</th>
<th style="width:12%"> n (hierarchical level)
</th>
<th style="width:12%"> Sn (full mode hierarchy)
</th>
<th style="width:12%"> M (missing subfolders in deepest level)
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 360
</th>
<th style="background-color: #eeeeee;align:right"> 3
</th>
<th style="background-color: #eeeeee;align:right"> 10
</th>
<th style="align:right"> 36
</th>
<th style="align:right"> 4
</th>
<th style="align:right"> 40
</th>
<th style="align:right"> 4
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 25
</th>
<th style="background-color: #eeeeee;align:right"> 200
</th>
<th style="align:right"> 5000
</th>
<th style="align:right"> 4
</th>
<th style="align:right"> 16276
</th>
<th style="align:right"> 11276
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 50
</th>
<th style="background-color: #eeeeee;align:right"> 200
</th>
<th style="align:right"> 5000
</th>
<th style="align:right"> 4
</th>
<th style="align:right"> 127551
</th>
<th style="align:right"> 122551
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 75
</th>
<th style="background-color: #eeeeee;align:right"> 300
</th>
<th style="align:right"> 3333
</th>
<th style="align:right"> 3
</th>
<th style="align:right"> 5701
</th>
<th style="align:right"> 2368
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 100
</th>
<th style="background-color: #eeeeee;align:right"> 300
</th>
<th style="align:right"> 3333
</th>
<th style="align:right"> 3
</th>
<th style="align:right"> 10101
</th>
<th style="align:right"> 6768
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 150
</th>
<th style="background-color: #eeeeee;align:right"> 300
</th>
<th style="align:right"> 3333
</th>
<th style="align:right"> 3
</th>
<th style="align:right"> 22651
</th>
<th style="align:right"> 19318
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 200
</th>
<th style="background-color: #eeeeee;align:right"> 350
</th>
<th style="align:right"> 2857
</th>
<th style="align:right"> 3
</th>
<th style="align:right"> 40201
</th>
<th style="align:right"> 37344
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 250
</th>
<th style="background-color: #eeeeee;align:right"> 500
</th>
<th style="align:right"> 2000
</th>
<th style="align:right"> 3
</th>
<th style="align:right"> 62751
</th>
<th style="align:right"> 60751
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 300
</th>
<th style="background-color: #eeeeee;align:right"> 750
</th>
<th style="align:right"> 1333
</th>
<th style="align:right"> 3
</th>
<th style="align:right"> 90301
</th>
<th style="align:right"> 88968
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 100
</th>
<th style="background-color: #eeeeee;align:right"> 400
</th>
<th style="align:right"> 2500
</th>
<th style="align:right"> 3
</th>
<th style="align:right"> 10101
</th>
<th style="align:right"> 7601
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 200
</th>
<th style="background-color: #eeeeee;align:right"> 500
</th>
<th style="align:right"> 2000
</th>
<th style="align:right"> 3
</th>
<th style="align:right"> 40201
</th>
<th style="align:right"> 38201
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 250
</th>
<th style="background-color: #eeeeee;align:right"> 600
</th>
<th style="align:right"> 1666
</th>
<th style="align:right"> 3
</th>
<th style="align:right"> 62751
</th>
<th style="align:right"> 61085
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 300
</th>
<th style="background-color: #eeeeee;align:right"> 750
</th>
<th style="align:right"> 1333
</th>
<th style="align:right"> 3
</th>
<th style="align:right"> 90301
</th>
<th style="align:right"> 88968
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 1000000
</th>
<th style="background-color: #eeeeee;align:right"> 300
</th>
<th style="background-color: #eeeeee;align:right"> 1000
</th>
<th style="align:right"> 1000
</th>
<th style="align:right"> 3
</th>
<th style="align:right"> 90301
</th>
<th style="align:right"> 89301
</th></tr>
</table>
<h4><span class="mw-headline" id="3._Hierarchical_structure_.28deterministically_calculation.29">3. Hierarchical structure (deterministically calculation)</span></h4>
<p>Another solution for building the hierarchical structure uses deterministically calculation based on the hash id, passed by the blackboard service to the Binary Storage Service.
The solution comes to avoid storing data into a single path location and to offer a hierarchic structure. The structure will be located under the binary.storage.root.path and it will be build by using parts from the passed hashed id.
</p><p>i.e. for a passed binary data, having the ID = "1d41cd87e735ceb23fdfafd814366b3ca9816e3dfce6fecc30560f8c242de", the deterministically calculation will assign fallowing path, where the record will be stored:
</p>
<pre> binary.storage.root.path\1d\41\cd\87\1d41cd87e735ceb23fdfafd814366b3ca9816e3dfce6fecc30560f8c242de
</pre>
<p>When using the deterministically calculation all data will be stored at the same hierarchic level.
</p><p>There are two parameters that could be configured in order to define the deterministically calculation:
</p>
<ul>
<li> hierarchy level (in our case n = 4)
</li>
<li> sub-tree (folder) name length (l = 2, these are the substring-parts starting from the left side of the hashed id, used to build the structure like&#160;: "1d", "41", "cd" and "87")
</li>
</ul>
<p>Because of the starting part of hashed id of different records (which define the hierarchic structure - deterministically calculation) may be different enough, it is very possible that in many cases there will be only single record stored into a deterministically calculated location (since there will be no match, or at least not enough, related to the left part of the hashed IDs - which defines the location where the record is going to be persisted). As a matter of fact, it is possible that a hierarchic structure to contains many subfolders that contain only one subfolder(not deepest level) or single record(deepest level). This my be an issue since most of the file system APIs creates listeners for all these sub-folders in order to provide cache (refresh) functionality, so for single record there will be 5 listeners (4 sub-folders + 1 record) created and memory consumption increases significantly.
</p><p><br />
</p>
<table border="1">
<tr>
<th style="background-color: #eeeeee; width:12%"> t (number of attachments)
</th>
<th style="background-color: #eeeeee;width:12%"> n (hierarchy level)
</th>
<th style="background-color: #eeeeee;width:12%"> l (sub-tree-folder name length )
</th>
<th style="width:12%"> TF (total number of folders)
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 540
</th>
<th style="background-color: #eeeeee;align:right"> 4
</th>
<th style="background-color: #eeeeee;align:right"> 2
</th>
<th style="align:right"> 977
</th></tr>
<tr>
<th style="background-color: #eeeeee;align:right"> 19013
</th>
<th style="background-color: #eeeeee;align:right"> 4
</th>
<th style="background-color: #eeeeee;align:right"> 2
</th>
<th style="align:right"> 54503
</th></tr>
</table>
<p>As long as the records number to be stored gets higher, the matching coincidence (the first string part of the hashed IDs that is used by the deterministically calculation) increases and the system becomes more efficient - from the number of records to number of sub-folders report.
</p><p>Following image, represents a simple sample of hierarchical structure obtained with deterministically calculation. Since accessing (storing and fetching) of records is done based on the hashed ID, there is no necessary to save any mapping between the record and calculated path location.
</p><p><a href="http://wiki.eclipse.org/File:SMILA-BinaryStorage-HierarchicalCalculation.jpg" class="image"><img alt="SMILA-BinaryStorage-HierarchicalCalculation.jpg" src="http://wiki.eclipse.org/images/8/80/SMILA-BinaryStorage-HierarchicalCalculation.jpg" width="688" height="788" /></a>
</p><p>The sample, also outlines hashed ID part matching on first hierarchic level which means common usage of some first subfloders level.
</p>
<h4><span class="mw-headline" id="Analyze_of_hierarchical_structure">Analyze of hierarchical structure</span></h4>
<table border="1">
<tr>
<th style="width:20%">
</th>
<th style="width:40%"> Advantages
</th>
<th style="width:40%"> Disadvantages
</th></tr>
<tr>
<th> Configurable Tree
</th>
<th>
<ul>
<li> configurable structure; splits node only when required
</li>
<li> less memory consumption
</li>
<li> better structure control
</li>
</ul>
</th>
<th>
<ul>
<li> mapping between hashed ID and persistence path needs to be stored
</li>
<li> possibility of assync. situations between the existing storage persistence and stored mapping (in case of some external factors alters the persistence storage)
</li>
<li> implementation effort
</li>
</ul>
</th></tr>
<tr>
<th> Deterministically Calculation
</th>
<th>
<ul>
<li> deterministically calculation -&gt; no mapping needs to be stored (hashed ID - stored path)
</li>
<li> less implementation effort (almost done)
</li>
</ul>
</th>
<th>
<ul>
<li> less control of the hierarchic structure
</li>
<li> nodes gets split depending on the matching coincidence between the first string part of the hashed IDs that is used by the deterministically calculation
</li>
<li> memory consumption and faster risk of OutOfMemory occurrence (the file system APIs creates listeners for all these sub-folders in order to provide cache (refresh) functionality, so for single record there will be 5 listeners (4 sub-folders + 1 record) created and memory consumption increases significantly)
</li>
</ul>
</th></tr>
</table>
<h3><span class="mw-headline" id="II._Distributed_file_system_.28SFTP.2C_FTP.29">II. Distributed file system (SFTP, FTP)</span></h3>
<p>The purpose of distributed file system option is to allow storing/accessing of binary data into network storage devices transparently through SFTP, FTP. User needs to provide configuration data related to distributed systems (host, user, password). It is considered that user has write access to the distributed system at the configured persistence location path.
</p>
<h4><span class="mw-headline" id="1._Flat_structure_2">1. Flat structure</span></h4>
<p>It has the same characteristics like in the local flat configuration, but it is applied on the persistence location from the distributed system.
</p>
<h4><span class="mw-headline" id="2._Hierarchical_structure_.28configurable_tree.29_2">2. Hierarchical structure (configurable tree)</span></h4>
<p>It has the same characteristics like in the local hierarchic (configurable tree) configuration, but it is applied on the persistence location from the distributed system.
</p>
<h4><span class="mw-headline" id="3._Hierarchical_structure_.28deterministically_calculation.29_2">3. Hierarchical structure (deterministically calculation)</span></h4>
<p>It has the same characteristics like in the local hierarchic (deterministically calculation) configuration, but it is applied on the persistence location from the distributed system.
</p>
<h3><span class="mw-headline" id="B._RDBMS">B. RDBMS</span></h3>
<p>Binary Storage Service shall also be able to store the records (blob) into RDBMS. Url connection-string shall be configured (driver, host, database name, port, user, password).
</p><p>For performance considerations, database schema shall contain multiple tables (since large BLOBs will be stored). Binary Storage Service shall deterministically distribute records to database tables.
</p>
<h3><span class="mw-headline" id="C._Object_DataBase">C. Object DataBase</span></h3>
<p>Binary Storage Service will use existing Open Source Object Database Engine to store the binary data. It is not Binary Storage Service responsibility to directly access the stored data; the service will store/fetch the data by using the exposed API.
</p><p>Open Source Database Engines&#160;:
</p>
<ul>
<li> db4o - <a rel="nofollow" class="external free" href="http://www.db4objects.com">http://www.db4objects.com</a> - GNU General Public License (GPL)
</li>
<li> NeoDatis ODB - <a rel="nofollow" class="external free" href="http://www.neodatis.org/">http://www.neodatis.org/</a> - GNU General Public License (GPL)
</li>
<li> Perst - <a rel="nofollow" class="external free" href="http://www.mcobject.com/perst/">http://www.mcobject.com/perst/</a> - GNU General Public License (GPL)
</li>
<li> Neo4j - <a rel="nofollow" class="external free" href="http://www.neo4j.org">http://www.neo4j.org</a> - GNU General Public License (GPL)
</li>
<li> JODB - <a rel="nofollow" class="external free" href="http://www.java-objects-database.com">http://www.java-objects-database.com</a> - GNU General Public License (GPL)
</li>
</ul>
<ul>
<li> Oracle Berkeley DB
</li>
<li> Berkeley DB Java Edition
</li>
</ul>
<h2><span class="mw-headline" id="Cluster_configuration">Cluster configuration</span></h2>
<p>Binary Storage Service must offer fallowing cluster configurations:
</p>
<ul>
<li> Client components clustering (like blackboard service) - where the client services run in cluster and all the cluster nodes needs to share the same data (which means, all the nodes have to share the same binary persistence storage). This will be only possible by configuring the Binary Storage Service to use the distributed file system option or object database option (where the Object Database Engine is capable to be remotely accessed - not an embedded designed database which does not allow directly remote connections);
</li>
<li> Persistence storage clustering - where binary data will be stored in more than one nodes.
</li>
</ul>
<p>The two cluster options shall be available even configuring both at the same time, or only one, or non of them.
</p><p>Both options must be supported by the frameworks / RDBMS that Binary Storage Service will use.
</p>
<h2><span class="mw-headline" id="Concurrent_access">Concurrent access</span></h2>
<p>Binary Storage Service shall allow multiple clients accessing (read/write) the storage. It is Binary Storage Service responsibilities to synchronize the operation in order to avoid deadlocks.
</p>
<h2><span class="mw-headline" id="Technical_aspects_for_designing_the_Binary_Storage_Service">Technical aspects for designing the Binary Storage Service</span></h2>
<ul>
<li> Binary data compressing and encryption shall be available via configuration
</li>
<li> Binary storage shall internally manage its persistence hierarchy.
</li>
<li> The binary service shall be designed as a single bundle / service.
</li>
<li> Exception handling mechanism should treat all internal binary storage (logical and unexpected) errors and wrap the exceptions into a “binary storage exception” that makes sense for the Blackboard service
</li>
<li> Resources synchronization shall be done at the lowest possible level
</li>
<li> Binary Storage shall manage its configuration internally (highly couple classes are difficult to maintain and hard to understand in isolation – they tend to introduce internal dependencies). Decouple binary storage configuration from blackboard service
</li>
</ul>
<p><a href="http://wiki.eclipse.org/File:2.Sequence_Diagram_NewBinaryStorae.jpg" class="image"><img alt="2.Sequence Diagram NewBinaryStorae.jpg" src="http://wiki.eclipse.org/images/c/c2/2.Sequence_Diagram_NewBinaryStorae.jpg" width="652" height="300" /></a>
</p>
<ul>
<li> The Binary Storage Service API shall stay as simple as possible
</li>
</ul>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="java source-java"><pre class="de1"><span class="kw4">void</span> store<span class="br0">&#40;</span><span class="kw3">String</span> id, <span class="kw3">InputStream</span> stream<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw4">void</span> store<span class="br0">&#40;</span><span class="kw3">String</span> id, <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> blob<span class="br0">&#41;</span>
<span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> fetchAsByte<span class="br0">&#40;</span><span class="kw3">String</span> id<span class="br0">&#41;</span>
<span class="kw3">InputStream</span> fetchAsStream<span class="br0">&#40;</span><span class="kw3">String</span> id<span class="br0">&#41;</span>
<span class="kw4">void</span> remove<span class="br0">&#40;</span><span class="kw3">String</span> id<span class="br0">&#41;</span>
<span class="kw4">int</span> fetchSize<span class="br0">&#40;</span><span class="kw3">String</span> id<span class="br0">&#41;</span></pre></div></div>
<h2><span class="mw-headline" id="UML_Class_Diagram">UML Class Diagram</span></h2>
<p><a href="http://wiki.eclipse.org/File:SMILA-BinaryStorage-ClassDiagram.jpg" class="image"><img alt="SMILA-BinaryStorage-ClassDiagram.jpg" src="http://wiki.eclipse.org/images/thumb/3/3d/SMILA-BinaryStorage-ClassDiagram.jpg/1024px-SMILA-BinaryStorage-ClassDiagram.jpg" width="1024" height="790" srcset="/images/thumb/3/3d/SMILA-BinaryStorage-ClassDiagram.jpg/1536px-SMILA-BinaryStorage-ClassDiagram.jpg 1.5x, /images/thumb/3/3d/SMILA-BinaryStorage-ClassDiagram.jpg/2048px-SMILA-BinaryStorage-ClassDiagram.jpg 2x" /></a>
</p>
<h2><span class="mw-headline" id="Test_Results">Test Results</span></h2>
<p>Following link contains results of tests based on different implementations (simple java.io and EFS).
</p><p><a rel="nofollow" class="external free" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=254852">https://bugs.eclipse.org/bugs/show_bug.cgi?id=254852</a>
</p>
<!--
NewPP limit report
CPU time usage: 0.204 seconds
Real time usage: 0.225 seconds
Preprocessor visited node count: 91/1000000
Preprocessor generated node count: 108/1000000
Post‐expand include size: 0/2097152 bytes
Template argument size: 0/2097152 bytes
Highest expansion depth: 2/40
Expensive parser function count: 0/100
-->
<!-- Saved in parser cache with key my_wiki:pcache:idhash:16278-0!*!*!!en!2!* and timestamp 20150413202238 and revision id 129000
-->
</div>
<!-- catlinks -->
<div id='catlinks' class='catlinks'><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="http://wiki.eclipse.org/Special:Categories" title="Special:Categories">Category</a>: <ul><li><a href="http://wiki.eclipse.org/Category:SMILA" title="Category:SMILA">SMILA</a></li></ul></div></div> <!-- /catlinks -->
</div>
</div>
</div>
</div>
<!-- /maincontent -->
<!-- printfooter -->
<div class="printfooter">
Retrieved from "<a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Binary_Storage&amp;oldid=129000">http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/Binary_Storage&amp;oldid=129000</a>" </div>
<!-- /printfooter -->
<!-- debughtml -->
<!-- /debughtml -->
</div>
<!-- /bodyContent -->
</section>
<!-- /content -->
<!-- footer -->
</div> <section id="footer-contribution-info" style="border-top:1px solid #ccc;" class="footer-offset background-white margin-top-25"><div class="container text-center padding-top-10 padding-bottom-10"><p id="footercredit">This page was last modified 05:04, 18 November 2008 by <a href="http://wiki.eclipse.org/index.php?title=User:Marius.cimpean.numerica.de&amp;action=edit&amp;redlink=1" class="new" title="User:Marius.cimpean.numerica.de (page does not exist)">Marius Cimpean</a>. Based on work by <a href="http://wiki.eclipse.org/User:T.menzel.brox.de" class="mw-redirect" title="User:T.menzel.brox.de">thomas menzel</a>.</p><p id="footerviews">This page has been accessed 10,098 times.</p></div></section> </main> <!-- /#main-content-container-row -->
<p id="back-to-top" class="noprint hidden-print">
<a class="visible-xs" href="Binary_Storage.html#top">Back to the top</a>
</p>
<footer role="contentinfo" class="noprint hidden-print">
<div class="container">
<div class="row">
<section id="footer-eclipse-foundation" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Eclipse Foundation</h2>
<ul class="nav">
<li><a href="https://eclipse.org/org/">About us</a></li>
<li><a href="https://eclipse.org/org/foundation/contact.php">Contact Us</a></li>
<li><a href="https://eclipse.org/donate">Donate</a></li>
<li><a href="https://eclipse.org/org/documents/">Governance</a></li>
<li><a href="https://eclipse.org/artwork/">Logo and Artwork</a></li>
<li><a href="https://eclipse.org/org/foundation/directors.php">Board of Directors</a></li>
</ul>
</section>
<section id="footer-legal" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Legal</h2>
<ul class="nav">
<li><a href="https://eclipse.org/legal/privacy.php">Privacy Policy</a></li>
<li><a href="https://eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
<li><a href="https://eclipse.org/legal/copyright.php">Copyright Agent</a></li>
<li><a href="https://eclipse.org/org/documents/epl-v10.php">Eclipse Public License </a></li>
<li><a href="https://eclipse.org/legal/">Legal Resources </a></li>
</ul>
</section>
<section id="footer-useful-links" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Useful Links</h2>
<ul class="nav">
<li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li>
<li><a href="http://help.eclipse.org/">Documentation</a></li>
<li><a href="https://eclipse.org/contribute/">How to Contribute</a></li>
<li><a href="https://eclipse.org/mail/">Mailing Lists</a></li>
<li><a href="https://eclipse.org/forums/">Forums</a></li>
<li><a href="http://marketplace.eclipse.org/">Marketplace</a></li>
</ul>
</section>
<section id="footer-other" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Other</h2>
<ul class="nav">
<li><a href="https://eclipse.org/ide/">IDE and Tools</a></li>
<li><a href="https://eclipse.org/projects">Community of Projects</a></li>
<li><a href="https://eclipse.org/org/workinggroups/">Working Groups</a></li>
</ul>
<ul class="list-inline social-media">
<li><a href="https://twitter.com/EclipseFdn"><i class="fa fa-twitter-square"></i></a></li>
<li><a href="https://plus.google.com/+Eclipse"><i class="fa fa-google-plus-square"></i></a></li>
<li><a href="https://www.facebook.com/eclipse.org"><i class="fa fa-facebook-square"></i> </a></li>
<li><a href="https://www.youtube.com/user/EclipseFdn"><i class="fa fa-youtube-square"></i></a></li>
</ul>
</section>
<div id="copyright" class="col-xs-offset-1 col-sm-14 col-md-24 col-md-offset-0">
<div>
<span><img src="http://eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-logo-bw-800x188.png" alt="Eclipse.org black and white logo" width="166" height="39" id="logo-eclipse-white"/></span>
<p id="copyright-text">Copyright &copy; 2014 The Eclipse Foundation. All Rights Reserved.</p>
</div>
</div>
<a href="Binary_Storage.html#" class="scrollup">Back to the top</a>
</div>
</div>
</footer>
<script src="http://wiki.eclipse.org/skins/solstice/public/javascript/main.min.js"></script>
<!-- Placed at the end of the document so the pages load faster -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-910670-2']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script> <!-- /footer -->
<script>/*<![CDATA[*/window.jQuery && jQuery.ready();/*]]>*/</script><script>if(window.mw){
mw.loader.state({"skins.solstice":"loading","site":"ready","user":"ready","user.groups":"ready"});
}</script>
<script src="http://wiki.eclipse.org/load.php?debug=false&amp;lang=en&amp;modules=skins.solstice&amp;only=scripts&amp;skin=solstice&amp;*"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.hidpi","mediawiki.page.ready","mediawiki.searchSuggest"],null,true);
}</script>
<script>if(window.mw){
mw.config.set({"wgBackendResponseTime":387});
}</script> </body>
</html>