The relative pull request is on 
https://github.com/apache/incubator-iotdb/pull/206 
<https://github.com/apache/incubator-iotdb/pull/206>. I would be glad if 
someone could review it for me.
A naive test showed that when executing 1000000 insertions, prepared statement 
costed 41094ms, normal statement costed 54035ms, which is a significant 
improvement.

> 在 2019年6月25日,下午10:58,江天 <[email protected]> 写道:
> 
> I have created an issue IOTDB-122 
> <https://issues.apache.org/jira/browse/IOTDB-122>, you may find it on 
> https://issues.apache.org/jira/projects/IOTDB/issues/IOTDB-122?filter=allopenissues
>  
> <https://issues.apache.org/jira/projects/IOTDB/issues/IOTDB-122?filter=allopenissues>.
> 
> 
>> 在 2019年6月25日,下午9:17,江天 <[email protected]> 写道:
>> 
>> Follow the preceding mail,
>> 
>> People of interest are welcomed to join this thread, discuss about this new 
>> feature and give advice. If no one has opposite opinion, I would like to set 
>> off to develop this feature.
>> 
>> Best regards,
>> 
>> Tian Jiang
>> 
>>> 在 2019年6月25日,下午8:41,江天 <[email protected]> 写道:
>>> 
>>> Hi,
>>> 
>>> As some have mentioned, sql parser(antlr) may consume about 40% of time in 
>>> ingestion, especially when small sqls executed sent frequently. Luckily, 
>>> IoTDB insertion sqls are currently all alike and simple, there are 4 most 
>>> meaningful parts of such sqls: deviceId, measurements, values and time. For 
>>> such a simple structure, using tools like antlr may be just too heavy.
>>> 
>>> Intuitively, PreparedStatement in Standard JDBC interface can be just used 
>>> for reliving parsing overhead when sqls are similar. I will describe how 
>>> PreparedStatement works as follow (this is still left to be implemented):
>>> 
>>> 1. The user wants to create a prepared insert statement and called 
>>> `connection.prepareStatement(“Insert”)`;
>>> 2. The connection matches the parameter string with some templates, finds 
>>> out it is an insertion and returns an IoTDBPreparedInsertStatement pStmt.
>>> 3. The user calls `pStmt.setDevice(“root.device1”); pStmt.setTime(100); 
>>> pStmt.setMeasurements(measurementArray); pStmt.setValues(valueArray);` to 
>>> set parameters for next insertion.
>>> 4. The user calls `pStmt.execute()` to execute an insertion.
>>> 5. The PreparedInsertStatement creates a TSInsertionReq, puts deviceId, 
>>> measurements, values and time into this request and sends this request to 
>>> the server.
>>> 6. The server receives the request, extracts parameters from the request 
>>> and executes an insertion directly through database engine and return a 
>>> TSInsertionResp to the user.
>> 
> 

Reply via email to