Hiya, I had me an idea the other day I got around to trying. We've been going over how to make JSON parsing über fast between Erlang and the View servers. Instead of making JSON parsing faster I decided to just drop it completely. I wrote enough code in couch_js.c tonight to get the basics of converting the ErlJSON -> Spidermonkey objects and back. Quite a few of the pertinent tests are passing. There was an issue with object iteration that prevent view collation from working correctly. And the show/list tests are broken because I didn't add XML serialization. Either way it was enough for me to collect some numbers with the same script I used on my blog a couple weeks ago.
The huge ass caveat on the tail end for Patch at 10K 8KiB docs is that this is best case scenario. I was just beefing up the document size by adding a large string on them. In the conversion process this ends up being a fairly quick pass using EncodeString and DecodeString. Another thing to notice is that once compiled with +native the numbers for small docs don't change too drastically. And here are numbers: Straight up trunk: 10K tiny docs -------------------------------- Inserting: 0.955830 Map only: 4.296859 With reduce: 4.014233 With erlang reduce: 3.199325 Inserting: 0.970745 Map only: 3.961110 With reduce: 4.550082 With erlang reduce: 3.493316 Inserting: 0.992892 Map only: 4.747793 With reduce: 4.552446 With erlang reduce: 3.681820 Straight up trunk: 1OK 4KiB Documents ------------------------------------- Inserting: 5.895689 Map only: 11.716073 With reduce: 12.127348 With erlang reduce: 11.069352 Inserting: 6.221656 Map only: 12.074525 With reduce: 11.500115 With erlang reduce: 10.680610 Inserting: 5.974915 Map only: 11.240969 With reduce: 11.620035 With erlang reduce: 10.458795 Straight up trunk: 10K 8KiB Documents ------------------------------------- Inserting: 9.533340 Map only: 16.273873 With reduce: 16.647050 With erlang reduce: 14.529038 Inserting: 9.828476 Map only: 15.772620 With reduce: 15.707862 With erlang reduce: 14.577865 Inserting: 9.598872 Map only: 15.251671 With reduce: 15.930784 With erlang reduce: 14.445052 Trunk +native 10K Tiny docs --------------------------- Inserting: 0.953937 Map only: 2.524961 With reduce: 2.411511 With erlang reduce: 1.541173 Inserting: 0.963175 Map only: 2.486752 With reduce: 2.354808 With erlang reduce: 1.534005 Inserting: 0.949138 Map only: 2.429267 With reduce: 2.385016 With erlang reduce: 1.525428 Trunk +native 10K 4KiB docs --------------------------- Inserting: 3.952355 Map only: 10.106112 With reduce: 9.687787 With erlang reduce: 8.781025 Inserting: 3.968877 Map only: 9.552732 With reduce: 9.626942 With erlang reduce: 8.537417 Inserting: 4.359648 Map only: 9.472417 With reduce: 9.719609 With erlang reduce: 8.771725 Trunk +native 10K 8KiB docs --------------------------- Inserting: 7.046171 Map only: 12.111946 With reduce: 11.566371 With erlang reduce: 10.571792 Inserting: 7.183114 Map only: 12.177807 With reduce: 11.619149 With erlang reduce: 10.461091 Inserting: 6.867450 Map only: 11.358312 With reduce: 11.420452 With erlang reduce: 10.452706 Patched 10K Tiny docs --------------------- Inserting: 0.954482 Map only: 2.339038 With reduce: 2.311544 With erlang reduce: 1.513258 Inserting: 0.942735 Map only: 2.543295 With reduce: 2.522470 With erlang reduce: 1.514119 Inserting: 0.961381 Map only: 2.372250 With reduce: 2.336503 With erlang reduce: 1.558217 Patched 10K 4KiB docs --------------------- Inserting: 5.933259 Map only: 5.484083 With reduce: 5.693180 With erlang reduce: 4.502828 Inserting: 5.980323 Map only: 5.251158 With reduce: 5.290837 With erlang reduce: 4.530348 Inserting: 6.067070 Map only: 5.501945 With reduce: 5.314363 With erlang reduce: 4.409588 Patched 10K 8KiB docs --------------------- Inserting: 7.096909 Map only: 5.293864 With reduce: 5.254415 With erlang reduce: 4.437001 Inserting: 6.847729 Map only: 5.191201 With reduce: 5.161696 With erlang reduce: 4.256955 Inserting: 7.168672 Map only: 5.294789 With reduce: 5.195616 With erlang reduce: 4.323075 Patched +native 10K Tiny docs ----------------------------- Inserting: 0.945826 Map only: 2.451693 With reduce: 2.383522 With erlang reduce: 1.578508 Inserting: 0.972655 Map only: 2.504448 With reduce: 2.343594 With erlang reduce: 1.512512 Inserting: 0.952105 Map only: 2.391866 With reduce: 2.329651 With erlang reduce: 1.505249 Patched +native 10K 4KiB docs ----------------------------- Inserting: 4.060498 Map only: 5.937243 With reduce: 5.611110 With erlang reduce: 4.813867 Inserting: 3.979680 Map only: 5.720481 With reduce: 5.602648 With erlang reduce: 4.734298 Inserting: 3.892947 Map only: 6.140995 With reduce: 5.565891 With erlang reduce: 4.736162 Patched +native 10K 8KiB docs ----------------------------- Inserting: 7.040456 Map only: 5.302867 With reduce: 5.269647 With erlang reduce: 4.433941 Inserting: 6.808467 Map only: 5.371900 With reduce: 5.203042 With erlang reduce: 4.347747 Inserting: 6.977694 Map only: 5.393854 With reduce: 5.368036 With erlang reduce: 4.368916
