Search Unity

  1. Calling all beginners! Join the FPS Beginners Mods Challenge until December 13.
    Dismiss Notice
  2. It's Cyber Week at the Asset Store!
    Dismiss Notice

[RELEASED] EODB - Object Databases (Local databases and Networked database w/ PHP)

Discussion in 'Assets and Asset Store' started by Elenesski, Jan 12, 2016.

  1. Elenesski

    Elenesski

    Joined:
    May 19, 2013
    Posts:
    21
    Elenesski's Object Database (EODB)

    EODB Asset Store Link: https://www.assetstore.unity3d.com/en/#!/content/52209
    NEODB Asset Store Link: NEODB is now part of EODB

    Freshdesk Support Articles: https://elenesski.freshdesk.com/support/home

    Detailed Online Documentation: http://eodb.elenesski.info

    EODB Tutorial Videos

    These assets provides the following major features:
    • Works entirely in code, does not use DLLs ... so no mobile issues.
    • Highly compressed data; uses a binary format.
      • Does not require Schemas, Tables, SQL or ORM.
      • Does not use Serialization (so no compatibility issues)
    • Save and reload any number of objects in almost any format.
      • Supports highly complex composite objects
      • Save different object formats for the same class.
    • Save objects into an in-memory database then write the entire database to disk in one operation.
    • Open multiple local databases at the same time (one for game settings, one to save games).
    • Save data online using NEODB
      • NEODB is an add-on, a network extension of EODB
      • PHP Server and stores data via mySQL (Recommended to use SSL/HTTPS)
      • Offers 130+ search options (11 core search methods w/ 12 different searches each)
        • Unlimited or Paged Data (find objects 50 to 60 from a sorted object set)
        • 3 Different Sorting Options (none, ascending, descending)
        • 2 Different ways to get Indexed data
        • Search indexes in intelligent ways (for single round trip searches) that return multiple rows
      • Open multiple networked databases at a time.
        • Supports multiple network connections to the same database at the same time.
        • Supports server farms (Azure, AWS) that have multiple database threads.
      • Currently in beta (but documentation is available, see link above.)
    • Objects can have:
      • Hard coded object identifiers
      • Dynamic object identifiers
      • Indexed identifiers
      • Conditional indexed identifiers
      • Can store composite objects, List<>, Dictionary<>, Array[], etc.
    • Built-in support for 27 primitive types + array equivalents for 54 types:
      • +Extensible ... create your own support for different types.
      • +Convertible ... transform formats of data
      • Primitives: bool, byte, short, int, long, float, string (up to 2Gb)
      • Classes: Vector2, Vector3, Rect, RectTransform, Quaternion, Color, Color32, DateTime
      • Arrays: byte[], int[], float[], string[], Color[], Color32[], Vector2[], Vector3[]
      • Others: Texture2D, AudioClip, Mesh, Stream

    Overview of the EODB Architecture


    Overview of the NEODB Architecture (Coming soon): http://design.elenesski.info


    Additional release information will be posted on this thread.
     
    Last edited: Apr 18, 2016
  2. Karsten

    Karsten

    Joined:
    Apr 8, 2012
    Posts:
    105
    Hello Elenesski,

    Can LINQ be used to get and put objects like in Db4o, or do you have to use a proprietary query mechanism? Reading the word "find script " in the diagram makes me think.
    You made some videos, is one of those clearing that question up?


    very interesting piece of software you have there.

    Greetings
    Karsten
     
  3. Elenesski

    Elenesski

    Joined:
    May 19, 2013
    Posts:
    21
    Hi Karsten, Sorry for the late reply, I never got a notification of your message till just now.

    In answer to your question, LINQ is used as the query engine, as I return IEnumerable<> everywhere. For example, I I'm currently writing a space game and I use this query to get all the Solar Systems.

    Code (csharp):
    1.  
    2.   public static IEnumerable<SolarSystem> GetAllSolarSystems() {
    3.         return GlobalData.GameDB.AllByClass(cClassName).Select(OID => Load(OID));
    4.   }
    5.  
    Coming up in Version 2.0, in which I am submitting the package tomorrow, you can have relational-like parent-child relationship, and have queries like:

    Code (csharp):
    1.  
    2.       Complex COMPLEX = aCurrentPlanet.Complexes.FirstOrDefault(A => A.VertexID == aVertexID);
    3.  
    Where "Complexes" is defined within a planet like this:

    Code (csharp):
    1.  
    2.     private EODBFKChildren<Assets.Code.Model.Complex>  _Complexes;
    3.     public IEnumerable<Assets.Code.Model.Complex> Complexes { get { return _Complexes.GetChildren(); } }
    4.  
    And declare _Complexes with:

    Code (csharp):
    1.  
    2.    _Complexes = new EODBFKChildren<Complex>(this,Complex.Load, "Complexes");
    3.  
    Where "this" is the parent, Complex.Load is a static that wraps a new so you can wrap Fowler's Identity Map, and "Complexes" is a unique name for the relationship. Load looks like this:

    Code (csharp):
    1.  
    2.   public static Planet Load(int aOID) {
    3.       return GlobalData.GameDB.IdentityMap.Get<Planet>(aOID) ?? new Planet(aOID);
    4.   }
    5.  
     
  4. Elenesski

    Elenesski

    Joined:
    May 19, 2013
    Posts:
    21
    EODB v2.0 has been pushed to the asset store and will be available within 1-2 weeks. Changes:

    Price Increased: US$30 -> US$45

    NEODB Added:
    * Added NEODB to the deployment to allow EODB users to store their objects remotely. (NEODB was going to be another asset, but decided to include it into EODB.)

    EODB Changes:
    * Minor bug fixes.
    * Preliminary changes needed to support NEODB (Network extension to EODB)
    * New: Support of Fowler's Identity Map Pattern:
    * Ensures only one instance of an object is in memory at the same time.
    * Added EODBIdentityMap class
    * New: Foreign Key references.
    * It's now possible to create parent-child relationships using foreign keys.
    * Previously you had to find all objects of a given type then filter by a parent's OID that had to be loaded into memory.
    * Now you can say myInstance.Children to get all the objects associated with the "Children" relationship without searching for all children or constructing objects.
    * Added EODBDescriptor.AddForeignKeyReference()
    * Added EODBFKChildren class
    * Added ".fkr" as a file type that is stored each time EODB is commited to the file system.
    * Existing projects should be unaffected by this update, however, foreign key references are stored in a .fkr file which will be in addition to the .db file it creates now.

    Updates to documentation will be posted on http://eodb.elenesski.info/ shortly.
     
  5. Elenesski

    Elenesski

    Joined:
    May 19, 2013
    Posts:
    21
    EODB v2.0 is now on the asset store.
     
  6. Elenesski

    Elenesski

    Joined:
    May 19, 2013
    Posts:
    21
    EODB v2.1 (Maintenance Released)

    EODB is actively being used in game development, and these changes are a result of that development.

    Bug Fixes:
    * Free space index no longer crashes, after the last free space entry is removed for a given size.
    * Fixed a rare edge case that led to a corrupt database.

    Breaking Changes:
    * Identity Map renamed "Delete" and "DeleteAll" to "RemoveFromIdentityMap" and "RemoveAllFromIdentityMap" to be more clear.

    Changes:
    * Added a logged message if the DB contained a duplicate. Before it threw an exception making a database impossible to load and diagnose.
    * Added IdentityMap registration to the EODBDescriptor used for saving to register the IEODBClass after an OID was set.

    Additions:
    * Added EODBParameters so that memory can be saved and loaded between session loads. It's to avoid the copying/maintenance of a class to do the same thing.
     
  7. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    1,496
    I am wondering how fast say a get operation based on a key (string) is compared to say normal dict<string, object> ?
     
  8. Skquark

    Skquark

    Joined:
    Jun 16, 2016
    Posts:
    3
    I've been searching for a good Unity Object Database solution for a while, and I really hope this one could do what I expect of it, but not sure. I'm a little concerned that it hasn't been updated for over a year... does that mean it's no longer being actively developed, or that everything is working perfect and there's no more updates needed? Is the NEODB part of it working reliably for saving to any host's MySQL or is it still being worked out?
    I wanted to use this for my Hololens app, which compiles to the strict Windows Store UWP .Net standard, and many older assets I've tried give compiler errors when building to that platform. I'm wondering if you can confirm for me that it's compatible with Universal Windows Platform builds (and Unity 2017+) before I purchase and get my hopes up.
    Without getting into too much detail, creating a collaborative Mixed Reality business application with fairly complex interconnected object class model, invitational sharing, local binary data file saving/loading, network cloud saving/loading, per object read/write/modify permission levels, synchronous value updates with OnChange events, saving/embedding Texture2D and AudioClips (was glad to see that supported) and stuff like that. Watched all your videos and read most of the online docs, and I like what I see, but would have been nice to see more complex custom class list examples in there to get a better idea of how I would implement. Looks like I've got a lot of work ahead of me if this is the way to go, but so far it looks like the best solution for what I got in mind.
    Also, if there is still a new update release planned, what upcoming features can we look forward to? Thanks, good stuff.