Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timegraph Extension Buggy #638

Open
eddiejibson opened this issue Nov 20, 2018 · 10 comments
Open

Timegraph Extension Buggy #638

eddiejibson opened this issue Nov 20, 2018 · 10 comments

Comments

@eddiejibson
Copy link

eddiejibson commented Nov 20, 2018

Hello,
I understand that gun.get() is used for retrieving data. However, in the case of only wanting to retrieve say the most recent entries meeting the keys specified, I was wondering if this was possible? For example, if I was building a public post system and wanted to display the top 50 most recent submissions, could this be done because getting every single post ever seems very silly? I know other databases allow such actions along with offering operators which allows the user to only get entries if a certain key is greater than a given integer. Is this a feature or could it be for Gun?

Thanks.

@Dletta
Copy link
Contributor

Dletta commented Nov 20, 2018

Hi @eddiejibson,
Check this out: https://gun.eco/docs/Timegraph.
It is specifically made for that kind of data structures. It is relatively new.

If you don't want to retrieve all of your data, you could create index nodes for a specific timerange, such as gun.get('submissions').get('week46').map().once(function). And as items are submitted you create new index nodes for each week. That is the beauty of graphs. you can still put all the data under submissions, but then you can link from another path to that submission to find it again. So if you ever need to list all, you can have gun.get('submissions').get('all') and still retrieve all of them.

@eddiejibson
Copy link
Author

Hi @Dletta. Thanks for your reply. That sounds like a good idea. However, I'm unsure the best way to store the week number as it currently returns the UNIX epoch value - should I convert it somehow?

@Dletta
Copy link
Contributor

Dletta commented Nov 29, 2018

@eddiejibson hmm, you might defined it as a range of epoch value converted to string. Or you can just say everything before Midnight of Saturday of a given week get's saved under the epoch time of that Saturday.

Does that make sense?
Example:
Week 48 / 2018 ends on Dec 1 2018, 11:59:59 pm, which is 1575273599 in unix time.
Unix time converter

function weekIndex (timestampPost, postObj) {
   if(globalWeekTimestamp > timestampPost) { //globalWeekTimestamp or function returning timestamp of today's week ending on Sat etc
      gun.get(globalWeekTimestamp).put(postObj) //add post under '1575273599'
   }
}

@mccoysc
Copy link

mccoysc commented Dec 2, 2018

timeGraph in time.js just stack over flow……for it saves time-related data in father-son,and when the data is so huge that the recursion would cause a stack-over-flow

@Dletta
Copy link
Contributor

Dletta commented Dec 2, 2018

@mccoysc have you had stack overflows with it?

@mccoysc
Copy link

mccoysc commented Dec 2, 2018

yes,about 100+ records in a time graph

@Dletta
Copy link
Contributor

Dletta commented Dec 3, 2018

@mccoysc Then I would recommend the approach I gave above, essentially indexing your time stamps and splitting them into searchable groups. Time graph is beta and has only been used in limited use cases.

@amark amark changed the title Return only a certain amount of entries Timegraph Extension Buggy Dec 6, 2018
@amark
Copy link
Owner

amark commented Dec 6, 2018

Is my title update correct?

timegraph is a super small extension https://github.com/amark/gun/blob/master/lib/time.js

Would anybody be willing to become a maintainer for it? All you need to know is how to save/traverse a custom time radix tree, which sounds fancy, but really isn't.

@bugs181
Copy link
Contributor

bugs181 commented Dec 22, 2018

@mccoysc could you give us an example of the code you're using and an example piece of data? How is your data structured?

For example; Does your data contain nested data? Does your data contain references to parent nodes?

@MediaByte
Copy link

MediaByte commented Jan 18, 2019

milano-server-3675b89bc12d494eac33ec6f9ec80f931eedff52.zip

Run the following commands:
$ cd milano-server
$ npm install

I made a python script to mimic activity coming from sensors.
The python program essentially does a while loop and sends a post request with data in the body. You’ll have to update the python code as It should be pointing to your local host on port 5000 please verify by running the script and if necessary update the address parameter in the post request.

Then...

$ cd py-script
$ pip install requests
$ python signals.py

Stack overflow issue
With the node application up and running and data getting pumped into the server. Head over to “recordData.js” in the controllers directory. Edit line 16 and change the parameter from 1 to 200. Here is where I get the stack overflow issue.

Performance:
After having experienced the stack overflow issue and updated the second parameter back to one (as in the example above) and Decided I’d try a test burn. After an hour, I ran the “top” command and found node was using 90% of memory. The performance on the browser was slow and everything was just laggy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants