iBoxDB

e^d = Ne^(Kd)

    cos { (1/2) ( y^(1/d) + (y^(-1/d)) ( 1 - (1-y)^(2/d) ) ) }
    projection { x = x*cos( a ) + k*cos( XtoK + a ) }
    geo - helio - entropycentrism - triocentrism
    0^0-e-LD-time-WE-light-HD;   e^(d+1) = Ne^(d+ln(e/N))
    |C| = |e^(Xi)|;   time = e^(Xi) - e^(0i)
    Ct = P = Ct'; t' = tk, Ctk = P'
    ( -V + C )cos( y, d1 ) = C = ( V + C )cos( y, d2 )
    Ft = L = F't'; F'=(-F); t'=0-t, t=0-t'; dipolar events.
    F' = ma' = m(V1-V0)/1 = m(C-V0) = observer deviation.
    each time one eats, the fate changed a bit.
    before time were clouds, life was born at first glance.
    F = [LD,WE,HD] = Rainbow Gravity.
    d(C^2) = d( V(x,y,z)V(x,y,z) ) = V(x,y,z)A(x,y,z) = 0,
    all movement have orthogonal acceleration.
    curvature = F(A) / F(V) = F(A)/1 = orthogonal force.
    zero parallel acceleration helps clusters running through.
    board a plane on the air to another speedtime.
    Twins: P = mV = (m0, V0) + (m1, V1) - (m2, -V2).
    use Twins to build High-Time and Low-Time,
    to mitigate Light-Time and Mass.
    reverse current middled in Coil to build Twins-photon,
    norms of U-D surfaces outward to get zero field solid.
    electrons are pinned in orbits to make solid flow in light.
    dark-solid has different orbits, anti-solid backs in time.
    b-field = relative movement, twist b-field = movement.
    { dot( V, curl(E) ) = dot( E, curl(V) ) } = DNA of Ether.
    cos(ratio,volume) of speedtime.
    leaving increases speed, closing increases time.
    curl(B) = (dE / dt) / (C^2) .. (C^2)curl(B) = curl(B+A),
    movement is self-repairing design of being.
    the goal of design is everything backs to origin.
    duplicate wave-info from past to present to achieve miracle.
    intercept zero-time beam-ship by entering no-time state.

Fast ACID Table-Style Document NoSQL Database

Application NoSQL Database small footprint makes it easier and cheaper to store and process data. embedded database server cross-platform development. fast lightweight ACID embedded table style document NoSQL database for java c# android unity xamarin mono blazor .net core linux windows. Thread-Safe best lightweight general purpose Java .NET Local ACID database. NoSQL Embedded Document Database Engine Java C# Mono Android ASP.NET Core. In Memory and On Disk Mobile Database, support Blazor to store data on server or client. and can post database from client to server when online. Java C# Local Serverless NoSQL Storage, with SQL Document Table. lightweight serverless database best NoSQL database embedded for .net java c# android stable standalone DB. Local Database Lightweight self-contained database Cross Platform for Linux and Mac and Win.

Description

iBoxDB is a fast acid table-style document NoSQL Embedded Database, easily store objects and documents, traditional table with unstructured data, zero configuration, pure JAVA and .NET engines, no dependencies.

iBoxDB has a well designed interface with great performance and capability for agile development. You can create applications with database services embedded and deploy it on mobiles, desktops, servers, to locally persist your data from anywhere.

Green, low carbon emission!

Dual Core Application Database.
for   Java   C#   Android   Unity   .NET   Mono   Linux   Windows.

Features

Examples,   CSharp   and   Java

Each box is an ISOLATED data space (transaction-based)

  using(var box = auto.Cube())
							{
							@//select, insert, update, delete ...
							@//replace()=(insert or update)
							@CommitResult cr = box.Commit();
							}
							

  try(Box box = auto.cube()){
							@...
							@CommitResult cr = box.commit();
							}  
as above, box is method's local variable, don't define as global variable. one box for one delivery. AutoBox can be defined globally in single application.

Advertising
Digital life starts here, record every parameter guided to memorable moment.

Normal Object
  Member m = new Member();
							m.Id = box.NewId();
							m.Name = "Andy";
							m.Password = EncodePassowrd("123");
							box["Member"].Insert(m);
							

  Member m = new Member();
							m.Id = box.newId();
							m.Name = "Kevin";
							box.d("Member").insert(m); 

Dynamic Object (document database)
  //Game : Dictionary<string, object>
							game["GameType"] = "ACT";
							box["Product"].Insert(game);
							

  //Game extends HashMap<String,Object>
							game.put("GameType", "ACT");
							box.d("Product").insert(game);  

Key Value Style Query
  box["Table", 2L].Select<Member>();
							//Composite Key
							box["Table2", 99, "ABC"].Select<Product>();
							

  box.d("Table", 3L).select(Member.class);
							//Composite Key
							box.d("Table2", 88, "ABC").select(Product.class);  

Composite Key Supported
  config.ensureTable(Item.class, "Item", "UID", "Type")
Database Composite Key
SQL Like
  /*
							from TABLE where A>? & B<=? order by C limit 0,10
							
							from [table] where [condition]
							order by [field1] desc,[field2] limit [0,10]
							[Condition:] == != < <= > >= & | ( )
							*/
							box.Select<Member>("from Member where Name==?", "MyName");
  box.select(Member.class, "from Member where Name==?", "MyName"); 

Query
  //query
						box.Select("from Member");  
Query Options
  //load to memory first, startswith '*'.
						//because the OS has read-ahead setting,
						//normally don't need to load first.
						box.Select("*from Member");
						//selecting tracer, startswith '!'
						box.Select("!from Member");  

Weak Object
  //Strongly typed
						box.select("from Table where Id > ?" , 1L);
						//Weak Object
						box.select("from Table where Id > ?" , new Variant("1"));
						
						//!any Condition without Comparison is undefined!
						select(" ... where Name ... ");

Index, make Select hundred times faster in average
  //Index
						config.EnsureIndex<Member>("Member", "Field1")
						config.ensureIndex(Member.class, "Member", isUnique,"Field1")
  //Composite-Index
						config.EnsureIndex<Member>("Member", "Field1","Field2")
						config.ensureIndex(Member.class, "Member", isUnique,"Field1","Field2")
 //Both can speed up Search, free to choose one of them.
						//only one Index will be selected in one Search,
						//adding both to one Search will waste.
						//Index is generic, and fast enough.
						//Composite-Index mostly used in equal-and-equal scenario
						box.Select("from Member where Field1 == ? & Field2 == ?",arg1,arg2)

  //Id on the Left would faster in many cases
						box.Select("from Member where Id == ? & Field == ?",id,arg)
						
						//Key is primary Index, can create composite Index with Key
						//but Key is unique, the second field is rarely used
						config.EnsureIndex(..., "Id","Field")
						//switch the order might help in some cases
						config.EnsureIndex(..., "Field","Id")
						//see detail of Array comparison
						//KeyValue databases always have Key

  //combining Results would faster than OR,
						//depends on the scale of dataset and corresponded Index configure.
						//where Id == ? | Id == ? | Id == ?
						foreach(var id in [ 1, 2, 3 ])
						@combiner.Add( box.Select("from Member where Id == ?",id) )

Custom QueryFunction
  box.Select<Member>("from Member where [Tags]", new IFunction("Value"))

Custom Object Table Binding
  public bool Insert(Member m){
							@return auto.Insert(nameof(Member), m);
							}

Nested Columns
  // Flatten nested Columns
							// obj.site.name = _name;
							obj.site_name = "Leibniz";

Compatible with LINQ (.NET)
  from o in box.Select<Member>("from Member")
							@where o.Text.Contains(text) select o;

Compatible with Stream (Java)
  StreamSupport
							@.stream(box.select(Member.class,"from Member").spliterator(), true)
							@.collect(groupingBy(m -> m.group, summarizingLong(m -> m.value)))

Ason and Prototype Columns
  //define prototype, Id is Long
							Ason prototype = new Ason("Id:", 0L, "Name:", "Guest");
							
							Ason record = prototype.select();
							//set Id as String,
							record.set("Id", "123");
							//will automatically convert to Long as the prototype
							System.out.println("Output: " + record.get("Id").getClass());
							//Output: class java.lang.Long
							

Hot Mirror Copy
  auto.GetDatabase().CopyTo(bakAddr, bakRoot, buffer);
							@.CopyTo(bakAddr, bakRoot, buffer, new_mask_key_128000='!!NULL');

Directly Select
  //Select records from a samll file directly
							//without initializing database
							IEnumerable records = DB.Select(fileAddress) 

Transaction Huggers
  //Three transactions committed together
							long huggersBuffer = 1024L * 1024L * 32L;
							box1.Commit(huggersBuffer);
							box2.Commit(huggersBuffer);
							box3.Commit(); 

Programmable Replication
  //Master-Master
							BoxData.masterReplicate();
							//Master-Slave
							BoxData.slaveReplicate();

Snapshot-Serializable Transaction
Transaction Step Isolation Level
Application Point Snapshot
Database Point Serializable
using(var box = auto.Cube()){
						@//Snapshot...
						@box.Commit( ()=>{
						@@//Serializable...
						@});
						}

Update Increment
Update Increment Auto Increment
Apply To index key
Trigger insert / update insert
Type long number
Value From database newId (MaxPos,1) table max (ID)+1
Generator Time serializable transaction commit data insert, differed from commit order

Selecting Tracer
Tracer Locker
Thread non-blocked blocked
Usage read / write different records read / write same record

IO
IO
 BoxFileStreamConfig
									BoxMemoryStreamConfig
									ReadonlyStreamConfig
									CacheStreamConfig 

Database Path
C# & JAVA,  place outside IDE working directory can get better performance
//different path has hugely different writing speed on VM.
						//Create Directory before putting DB inside.
						//new File(path).mkdirs();
						//Directory.CreateDirectory(path)
						IBoxDB.LocalServer.DB.Root("/data/") 
Add this Database Path as Exclusion into Scan-System to get higher performance, for example, System Defender.

ASP.NET Cross Platform
DB.Root(MapPath("~/App_Data/"))

Xamarin
DB.Root(System.Environment.GetFolderPath(
						@System.Environment.SpecialFolder.LocalApplicationData/Personal))

Unity3D
DB.Root(Application.persistentDataPath)

Android
DB.root(android.os.Environment.getDataDirectory()
						@.getAbsolutePath() + "/data/" + packageName + "/") 

JSP WebApplication
@WebListener()
						public class StartListener implements ServletContextListener {
						@@Override
						@public void contextInitialized(ServletContextEvent sce) {
						@@String path = System.getProperty("user.home") + "/data/";
						@@new File(path).mkdirs();
						@@DB.root(path);
						@}
						} 

Godot
<PackageReference Include="iBoxDB" Version="" />
						var dir = Godot.OS.GetUserDataDir();
						dir = Path.Combine(dir, "DBROOT");
						Directory.CreateDirectory(dir);
						DB.Root(dir)

jMonkeyEngine
File dir = JmeSystem.getStorageFolder(StorageFolderType.Internal);
						dir = new File(dir, "ProjectName");
						dir = new File(dir, "DatabaseName");
						dir.mkdir();
						DB.root(dir.getAbsolutePath()); 

Getting Started
 using IBoxDB.LocalServer;
						
						var db = new DB();
						db.GetConfig().EnsureTable<Record>("Table", "Id");
						AutoBox auto = db.Open();
						
						auto.Insert("Table", new Record { Id = 1L, Name = "Andy" });
						var record = auto.Get<Record>("Table", 1L);
						record.Name = "Kelly";
						auto.Update("Table", record);
						auto.Delete("Table", 1L);  

 import iboxdb.localserver.*;
						
						DB db = new DB();
						db.getConfig().ensureTable(Record.class, "Table", "Id");
						AutoBox auto = db.open();
						
						auto.insert("Table", new Record(1L, "Andy"));
						Record record = auto.get(Record.class, "Table", 1L);
						record.Name = "Kelly";
						auto.update("Table", record);
						auto.delete("Table", 1L);  

Memory Usage
 DatabaseConfig cfg = db.getConfig();
							//Cache Memory, set less 1/3 total
							cfg.CacheLength = cfg.mb(1024L);
							//Mobile Device 64MB
							cfg.CacheLength = cfg.mb(64L);
							//Read Pool, set 8+ to low Cache machine
							cfg.ReadStreamCount = 8;
							//Write Pool, set 4- to low Cache machine
						cfg.WriteStreamCount = 1;

Install
.NET: Add NETDB/iBoxDB.DLL  to Project
Java: Add JavaDB/iboxdb.jar to Project

Benchmark with MySQL
iBoxDB
						Insert: 1,000,000 AVG: 47,016 objects/s
						Update: 1,000,000 AVG: 25,558 objects/s
						Delete: 1,000,000 AVG: 42,714 objects/s
						
						MySQL
						Insert: 1,000,000 AVG: 5,514 objects/s
						Update: 1,000,000 AVG: 5,109 objects/s
						Delete: 1,000,000 AVG: 6,044 objects/s
						

Benchmark Anytime
Locally benchmark the whole Application before every publishing as you wish. No expensive request units (RU/s).

Supported Types
.NET JAVA
 bool
										char
										byte
										sbyte
										short
										ushort
										int
										uint
										long
										ulong
										float
										double
										decimal
										DateTime
										Guid
										
										bool?
										char?
										byte?
										sbyte?
										short?
										ushort?
										int?
										uint?
										long?
										ulong?
										float?
										double?
										decimal?
										DateTime?
										Guid?
										string
										
										//non indexable
										Dictionary<string, object>
										byte[]
										string[]
										//file
										MemoryStream
										 
 boolean
									Boolean
									byte
									Byte
									char
									Character
									short
									Short
									int
									Integer
									long
									Long
									float
									Float
									double
									Double
									UUID
									Date
									
									//dynamic length
									BigDecimal
									BigInteger
									String
									
									//non indexable
									HashMap<String, Object>
									byte[]
									Object[]
									//file
									MemoryStream
									
									
									
									
									
									
									
									
									
									
									
Automatic Object Mapping
//Name
									*.Name
									
									//name
									*.name
									
									
									
									
									
//Name
									*.Name
									*.Name(val)
									*.setName(val)
									
									//name
									*.name
									*.name(val)
									*.setname(val)
 DatabaseConfig cfg;
						//Create Table
						ensureTable(Record.class, "Table", "Id");
						//Create Index with length 32
						ensureIndex(Record.class, "Table", "Name(32)");
						
						//Indexing for byte[] or others,
						//using ToBase64String(byte[]) Converts it to String. 

.NET AOT Register Types
 public static object Register
						@<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>()
						@where T : new()
						{
						@return new T();
						}
						//Trigger DynamicallyAccessedMemberTypes.All
						Register<T1>();
						EnsureTable<T1>("T1", "Id"); 

Cross Platform
NoSQL Application Database for JAVA .NET Android Mono Unity3D Xamarin Linux Windows

NEXT - >
iBoxDB professional document database ACID NoSQL application database .net c# java core xamarin unity3d android embedded document database powerful cross platform NoSQL databases system. Application NoSQL database small footprint makes it easier and cheaper to store and process data. NoSQL embedded document database engines for .net java c# mono android. cross-platform development. Just Enough to Get the Job Done.
Show
Visitors