IntelLabs / pmgd

Persistent Memory Graph Database
MIT License
43 stars 9 forks source link

suggestions for adding event triggers and new types? #47

Closed lonnietc closed 2 years ago

lonnietc commented 2 years ago

Hello,

I am definitely using PMGD in my project development and have an idea for a few advanced features that I want to include but wanted to get some suggestions from you, the developers.

I want to be able to add:

  1. New data types --- What I have in mind is a data type that will allow you to associate a file, maybe a property of a node, but that PMGD would maybe either encrypt the file, or filename, and then store the actual file in some directory on the local machine. Basically, PMGD would hold the filename in the property but it would be linked to the actual file in the directory. This gives the ability to "pin" files to nodes but not actually store the file in the database itself.

  2. Event Triggers --- I am researching to figure out a way to add graph node, property, and edge triggers to PMGD such that these triggers can be assigned to a node as maybe a "trigger" property such that they can be set up to trigger on "Read", "Write", "Execute" (like PRE traversing into, or POST traversing out from) , "Timer", others. These triggers could be applied to the node, a property, or and edge maybe just as some initial ideas.

I am building a modular type application which will be a type of graph database with a number of different new qualities like these and some others as well, but will also be cross-platform for Linux, Windows, and MacOS.

Just a small note on the project. I will probably be using a Golang main driver code to call the PMGD library methods as needed, but was trying to determine if I should investigate adding in the Event library in C++ to augment PMGD or if maybe have PMGD call Golang event handlers. This is more to the questions as to what might be the best approach to interface with PMGD.

That's the goal, at least.

Any thoughts or suggestions would be greatly appreciated. Thanks and have a great day

Ragaad commented 2 years ago

Hey,

Are you aware of VDMS that is data base management that uses PMGD to store the data. I think your first point is covered by VDMS. VDMS is a general DMS that suites visual data like image, videos or blobs in general. https://github.com/IntelLabs/vdms you can store the file but you can save the meta data of the file in PMGD. PMGD will know the reference of the file. The other point seems to be interesting, you may share more details of the use case.

Ragaad

From: LonnieTC @.> Sent: Tuesday, March 15, 2022 12:26 PM To: IntelLabs/pmgd @.> Cc: Subscribed @.***> Subject: [IntelLabs/pmgd] suggestions for adding event triggers and new types? (Issue #47)

Hello,

I am definitely using PMGD in my project development and have an idea for a few advanced features that I want to include but wanted to get some suggestions from you, the developers.

I want to be able to add:

  1. New data types --- What I have in mind is a data type that will allow you to associate a file, maybe a property of a node, but that PMGD would maybe either encrypt the file, or filename, and then store the actual file in some directory on the local machine. Basically, PMGD would hold the filename in the property but it would be linked to the actual file in the directory. This gives the ability to "pin" files to nodes but not actually store the file in the database itself.
  2. Event Triggers --- I am researching to figure out a way to add graph node, property, and edge triggers to PMGD such that these triggers can be assigned to a node as maybe a "trigger" property such that they can be set up to trigger on "Read", "Write", "Execute" (like PRE traversing into, or POST traversing out from) , "Timer", others. These triggers could be applied to the node, a property, or and edge maybe just as some initial ideas.

I am building a modular type application which will be a type of graph database with a number of different new qualities like these and some others as well, but will also be cross-platform for Linux, Windows, and MacOS.

That's the goal, at least.

Any thoughts or suggestions would be greatly appreciated. Thanks and have a great day

— Reply to this email directly, view it on GitHubhttps://github.com/IntelLabs/pmgd/issues/47, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AC7DURNGD4APVFFYDJWXOXDVADP35ANCNFSM5QZV3L3A. Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub. You are receiving this because you are subscribed to this thread.Message ID: @.**@.>>

lonnietc commented 2 years ago

Hello Ragaad,

Yea, I know a little bit about the VDMS project but as you mentioned, it is more suited for big visual data and also has a dependence on TileDB which, in itself, is also an interesting approach to use array blocks a core storage, but I wanted to basically take a fork of PMGD (https://github.com/omp87/pmgd/tree/develop) since it builds cleanly and work on introducing some of these changes myself if at all possible.

Additionally, I think that the VDMS project, although interesting, loses its cross-platform capabilities by introducing the other dependencies while I need to keep that in my efforts as well as maintain a library approach that I can link into Golang for the driver.

For the Pining of files in case (1) the thoughts were that maybe I could figure out where in the code the "Types" are introduced and make an addition along the "blob" type for this purpose.

On the second item (2) there will be a number of use cases and this is a feature in practicality that users may want. My background, in addition to having advanced degrees in Physics and Mathematics, is also with an advanced degree in Computer Science where I had a LOT of experience and background with AI and Neural Networks. To this end, part of the application that I am developing is going to be in what I am calling a "Neurograph", or "Smartgraph" (Not sure which actually sounds better yet) in that it will have capabilities of a standard Graph database but also exhibit properties of a type of a psuedo-Neural Network that will allow for nodes. properties, and edges to trigger other nodes and sub-graphs for some information or some action. Additionally, someone could then also set up graph timers to enable the development of a type of Spiking-Neural Network type design as well, all just because triggers will have been implemented.

We could think of this as a "programable" graph which also has great implications for a knowledgebase or within ML and AL for knowledge and process actions. Effectively, as "graph" could be programmed to do something based upon its input, output, timer, Pre- or Post- traversals.

On the note, of triggers, I have just found a good C++ library that could be useful in this area:

https://github.com/wqking/eventpp

It has MIT licensing, and should be able to support at least 10M events/s, but I am still reviewing it now.

The graph could, for example, be programmed to add a new node with some properties and update some edges based upon another node being activated or reaching some condition.

This type of thing along with being able to have a substantial scripting language will also allow many functions to act upon various node actions, its properties, and surrounding neighbors.

Of course there are the standard graph languages like GraphQL, Cypher, and Gremlin, buy my system will allow any of them, or all of them, or a custom language to be easily added simply as a plugin. This along with other plugins for various other features will greatly enhance the whole system, but at its core will be the PMGD library and hopefully these new features that I have mentioned.

This will really give the user unprecedented power over the current graph technologies since it is stepping into a new level of functionality, control and are taking graph-based systems to the next level.

Just as small intro which could go on for much longer, but hope that it gives you a basic idea although I will have many more unique features as well.

Cheers