Git Product home page Git Product logo

fallen-8's People

Contributors

cosh avatar gitter-badger avatar iloginov avatar jens-g avatar s3bb1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fallen-8's Issues

Unit tests

Implement all inconclusive unit tests

Allow 2^32 graph elements

Due to the 2GB memory per object limitation there has to be some kind of sharding towards multiple arrays of graph elements.

Load/Save

It should be possible to load or save Fallen-8 via the REST-interface

Request: Distributed and embedded

What are the chances of the following ever being possible...

  1. Create a new C# project in Visual Studio
  2. Reference the Fallen dlls (C# or C++)
  3. Create a Fallen instance with basic configuration (ie. potential peers, instance data store location, key to allow peers to talk securely) using a single command
  4. Create a graph traversal Action that takes parameters Graph graph, Stack currentPath, PriorityQueue frontierQueue, T sharedData
  5. Run the traversal using a single command (ie. graph.Traverse(action, sharedData) with sharedData being both the input and output. The traversal algorithm's designer has to deal with concurrency issues on their sharedData object.
  6. Optionally create a separate project that follows steps one and two but creates an instance of a Fallen admin class that runs sharding (clustering?) algorithms in a separate process and and talks to the operational database as required.

I would love this and would be more than happy to contribute if there was an interest in this direction.

Samples

Great code, but no samples.

Synchronization issues

The synchronization concept seems largely broken when it comes to operations requiring more than one step executed atomically. Because all synchronisation happens inside the methods, there is no way to ensure that a sequence like (pseudo code)

  var elms = graph.FindSetOfElements()
  graph.Delete(elms)

is executed atomically. The above scenario becomes a problem, when some other thread tries to manipulate or even read some of these elements at the same time.

The (bad) workaround is to add some R/W lock to the whole thing and use that as a sync mechanism instead of reyling on the builtin locks.

OOM during Save()

I reproduceably get a OOM crash when I reach a certain level of data in the database. It is always at the same place in the code, while attempting to Save() the data:

System.OutOfMemoryException wurde nicht von Benutzercode behandelt.
  HResult=-2147024882
  Message=Eine Ausnahme vom Typ "System.OutOfMemoryException" wurde ausgelöst.
  Source=mscorlib
  StackTrace:
       bei System.IO.FileStream.Write(Byte[] array, Int32 offset, Int32 count)
       bei System.IO.BinaryWriter.Write(Int32 value)
       bei Framework.Serialization.SerializationWriter..ctor(Stream stream, Boolean allowUpdateHeader) in d:\DEVELOP\MyProject\3rdparty\fallen-8\Dependencies\FastSerializer\Serialization\SerializationWriter.cs:Zeile 208.
       bei Framework.Serialization.SerializationWriter..ctor(Stream stream) in d:\DEVELOP\MyProject\3rdparty\fallen-8\Dependencies\FastSerializer\Serialization\SerializationWriter.cs:Zeile 186.
       bei NoSQL.GraphDB.Persistency.PersistencyFactory.SaveIndex(String indexName, IIndex index, String path) in d:\DEVELOP\MyProject\3rdparty\fallen-8\Fallen-8\Persistency\PersistencyFactory.cs:Zeile 277.
       bei NoSQL.GraphDB.Persistency.PersistencyFactory.<>c__DisplayClass7.<Save>b__1() in d:\DEVELOP\MyProject\3rdparty\fallen-8\Fallen-8\Persistency\PersistencyFactory.cs:Zeile 199.
       bei System.Threading.Tasks.Task`1.InnerInvoke()
       bei System.Threading.Tasks.Task.Execute()

Environment is 64bit Windows 8.1 with lots of free RAM, if that matters.

modify properties after creation

I just noticed that I can modify properties via the REST service interface, at least it is part of the contract.

But when I link directly against the assembly, I can't do that, because TryAddProperty() (which should be named TryAddOrUpdateProperty()) and TryRemoveProperty() both are internal, not public, hence not accessible from the outside.

Is there a reason for that which I overlook, or is it just inconsistent and they could safely be set to public without running into trouble?

Replication / Synchronisation

It shall be possible to replicate f8 on multiple machines / local vm instances. This is for the purpose of scaling read requests and to increase fault tolerance. For that, we have to develop a way to synchronize db states between multiple f8 instances including message transfer, sync-protocols, error detection and -correction.

The first part should be the investigation on the topic. We need to compare different technologies and different protocols. The result of this phase also includes be a decision between centralized (M/S) oder decentralized (P2P) organization.

After that we have to select a technology to use for the implementation. There are different frameworks available, but we currently prefer our own implementation based on WCF.

When we selected a technolgy, we build a first prototype :)

BUG Save doesn't work

System.ArgumentException: Sections cannot exceed 32 bits in total
at System.Collections.Specialized.BitVector32.CreateSection (Int16 maxValue, Section previous) [0x00041] in /private/tmp/monobuild/build/BUILD/mono-2.10.9/mcs/class/System/System.Collections.Specialized/BitVector32.cs:190
at Framework.Serialization.SerializationWriter..cctor () [0x00000] in :0

Search

Create multiple REST-endpoints to be able to search (idx/scan) the fallen-8 via REST

Request: Traversal Prioritisation

I'm a big fan of the idea of having a single data store for both oltp and olap, although query prioritisation immediately becomes a concept of interest when these are combined. In my mind a graph database is always really just processing on big priority queue of nodes. From this perspective I'm wondering how easy it would be to add naive traversal prioritisation?

I haven't got a full grasp of the current codebase yet, will have a look myself over the next few days.

Optional service persistency

It should be possible to serialize and deserialize services. On deserialization it should be possible to specify whether the services should be started or not.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.