<div dir="ltr"><div>Dear developers,</div><div><br></div><div>We found a problem that it is too slow to show a big table using default view. I wrote a description as below with Markdown description. I hope that the description is clear enough to understand. Don't hesitate to let me know if you don't understand any part.</div>
<div><br></div><div>Best,</div><div>Jinpeng</div><div>Brainomics in Neurospin in CEA</div><div><br></div><div><div>Create a new cube as:</div><div><br></div><div>```</div><div>$ cubicweb-ctl newcube test_big_table</div><div>
Enter a short description for your cube: dddd</div><div>```</div><div><br></div><div>Modify test_big_table/schema.py as:</div><div>```</div><div>from yams.buildobjs import (EntityType, RelationDefinition,</div><div>                            SubjectRelation, String, RichString,</div>
<div>                            BigInt, Int, Float, Boolean)</div><div>class DataEntity(EntityType):</div><div>    """ Test big table"""</div><div>    name = String(maxsize=256)  # HotSpot</div>
<div>    data = Float(required=True)</div><div>```</div><div><br></div><div>Create an instance as i_test_big_table:</div><div>```</div><div>$ cubicweb-ctl create test_big_table i_test_big_table</div><div>$ cubicweb-ctl start i_test_big_table</div>
<div>```</div><div><br></div><div>Create a python script "import_db_big_table.py" as below:</div><div><br></div><div>```</div><div>from cubicweb.dataimport import SQLGenObjectStore</div><div>if __name__ == "__main__":</div>
<div>    store = SQLGenObjectStore(session)</div><div>    for i in xrange(1000000):</div><div>        if i % 100000 == 0:</div><div>            print i</div><div>            store.flush()</div><div>        data = {"name": "%d" % i, "data": float(i)}</div>
<div>        store.create_entity('DataEntity', **data)</div><div>    store.flush()</div><div>```</div><div><br></div><div>Run this script to import all the data:</div><div>```</div><div>$ cubicweb-ctl shell i_test_big_table import_db_big_table.py</div>
<div>```</div><div><br></div><div>Go to the web page (<a href="http://127.0.0.1:8080">http://127.0.0.1:8080</a>) to see DataEntity, it will take more than 5 seconds to open pages with only first 40 data items among 1 million data items. If there are 10 million data, it will take more than 1 minute. In fact, if we execute rql in shell mode and only get first 40 items, it will show it very fast:</div>
<div><br></div><div>```</div><div>$ cubicweb-ctl shell i_test_big_table</div><div>>>> res = session.execute("Any E where E is DataEntity")</div><div>>>> entities = res.entities()</div><div>>>> entities.next()</div>
<div><Entity DataEntity 656551 ['cwuri', 'data', 'name', 'modification_date', 'creation_date'] at 55907984></div><div>```</div><div><br></div><div>We guess that the default view may try to load all the data once and show only first 40 items. In our real database, we have 10 million data, it will take more than 1 minute to open web page where only first 40 items have been shown. It would be to better to improve the default view with loading limited number data items.  If there is another possible reason, please let us know. Thanks in advance.</div>
</div></div>