Giter Club home page Giter Club logo

Comments (15)

neithernut avatar neithernut commented on June 12, 2024 1

Did some measurements again (apparently missed an option last time). It looks to me like all the time really is consumed by yaml_rust, which is quite disappointing, tbh.

But maybe it's something you cannot get around with yaml: it's possible that, given a document consisting of a sequence in block representation, a parser has to perform an (expensive) look-ahaed over the entire file in order to ensure that it really is the root element (and the sequence is not, for example, the key of a mapping). However, I did not perform a thorough analysis.

Since this appears to be an issue of the yaml-dependency rather than something that can be fixed in rustbreak, this issue should be closed imo (as "wont fix").

from rustbreak.

TheNeikos avatar TheNeikos commented on June 12, 2024

Heya! Thanks for asking that, to be honest I don't know.

How complicated is your Yaml file? How quick is your Disk? Is it in RAM? There are so many possible causes for the slowness that I am not sure what could be going on.

from rustbreak.

trsh avatar trsh commented on June 12, 2024

@TheNeikos Im saving in a file. Disk not SDD. Yes it's complicated.

from rustbreak.

neithernut avatar neithernut commented on June 12, 2024

Maybe try gather some data using perf or a similar tool?

from rustbreak.

trsh avatar trsh commented on June 12, 2024

@neithernut I dont have time and resource to do such advanced tests at the moment.

from rustbreak.

neithernut avatar neithernut commented on June 12, 2024

I would not consider "using a profiler" advanced. However, if you can't do measurements yourself, maybe you can provide some more data. Is is possible for you to share the file you try to load? If not, can you give some hints regarding the structure (e.g. maximum/median nesting, number of entities per level)?

from rustbreak.

trsh avatar trsh commented on June 12, 2024

@neithernut will share when get to my work pc.

from rustbreak.

Boscop avatar Boscop commented on June 12, 2024

Have you considered switching the format to bincode, it will be read much faster..

from rustbreak.

trsh avatar trsh commented on June 12, 2024

@Boscop will try at some point, as u pointed it out!
@neithernut im sorry but my large Yaml us gone. As I did a logic workaround and made it smaller.. and it was in gitignore of the project, so :/. What I remember is that it had a huge Array inside Vec<u8>

from rustbreak.

neithernut avatar neithernut commented on June 12, 2024

Ok. Maybe I'll find some time to try to reproduce the issue over the weekend.

from rustbreak.

neithernut avatar neithernut commented on June 12, 2024

I've managed to "reproduce" the issue with the following reproducer:

extern crate rustbreak;

use std::env;
use std::fs::OpenOptions;

fn dummy_vec(mut len: usize) -> Vec<usize> {
    let mut res = Vec::new();
    while len > 0 {
        res.push(len);
        len = len - 1;
    }
    res
}

fn main() {
    let mut args = env::args().skip(1);

    let file = args.next().map(|p| OpenOptions::new().read(true).write(true).create(true).open(p)).unwrap().unwrap();
    let db = rustbreak::FileDatabase::<Vec<usize>, rustbreak::deser::Yaml>::from_file(file, Default::default()).unwrap();

    if let Some(numstr) = args.next() {
        db.put_data(dummy_vec(numstr.parse().unwrap()), true).unwrap();
        db.save().unwrap();
    } else {
        db.load().unwrap();
    }
}

I did not manage to get pointers out of perf, yet. I'll have a closer look in the near future.

from rustbreak.

trsh avatar trsh commented on June 12, 2024

@neithernut maybe u can complain in yaml_rust and see what they explain?

from rustbreak.

neithernut avatar neithernut commented on June 12, 2024

As I already expressed, it might be a problem which is inherent to yaml-parsers. I can investigate in the near future, but I doubt it's something which yaml_rust can fix.

You are really better of using another format.

from rustbreak.

trsh avatar trsh commented on June 12, 2024

@neithernut ok tnx.

from rustbreak.

TheNeikos avatar TheNeikos commented on June 12, 2024

Thank you @neithernut for taking a look into this!

from rustbreak.

Related Issues (20)

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.