[ 
https://issues.apache.org/jira/browse/SOLR-486?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12605126#action_12605126
 ] 

noble.paul edited comment on SOLR-486 at 6/16/08 9:04 AM:
----------------------------------------------------------

 If we take a look at the data that is written down by NamedListCodec there are 
a lot of "names" which are repeated.  If we could avoid the repetitions we can 
achieve better optimization. 
Can we have another type EXTERN_STRING 
The NamedListCodec maintains a Map<String,Integer>  of EXTERN_STRING vs index 
as it is written out. When the same string is written it checks up in the List 
whether it already has a reference.

While decoding all the EXTERN_STRING values are copied into a List <String>. 
When an EXTERN_STRING with an index comes it is copied from the List.

{code:title=NamedListCodec.java}
  private int stringsCount  =  0;
  private Map<String,Integer> stringsMap;
  private List<String > stringsList;
  public void writeExternString(String s) throws IOException {
    if(s == null) {
      writeTag(NULL) ;
      return;
    }
    Integer idx = stringsMap == null ? null : stringsMap.get(s);
    if(idx == null) idx =0;
    writeTag(EXTERN_STRING,idx);
    if(idx == 0){
      writeStr(s);
      if(stringsMap == null) stringsMap = new HashMap<String, Integer>();
      stringsMap.put(s,++stringsCount);
    }

  }
  public String  readExternString(FastInputStream fis) throws IOException {
    int idx = readSize(fis);
    if (idx != 0) {// idx != 0 is the index of the extern string
      return stringsList.get(idx-1);
    } else {// idx == 0 means it has a string value
      String s = (String) readVal(fis);
      if(stringsList == null ) stringsList = new ArrayList<String>();
      stringsList.add(s);
      return s;
    }
  }
{code}

      was (Author: noble.paul):
     If we take a look at the data that is written down by NamedListCodec there 
are a lot of "names" which are repeated.  If we could avoid the repetitions we 
can achieve better optimization. 
Can we have another type EXTERN_STRING 
The NamedListCodec maintains a Map<String,Integer>  of EXTERN_STRING vs index 
as it is written out. When the same string is written it checks up in the List 
whether it already has a reference.

While decoding all the EXTERN_STRING values are copied into a List <String>. 
When an EXTERN_STRING with an index comes it is copied from the List.

{code:title=NamedListCodec.java}
private int stringsCount  =  -1;
  private Map<String,Integer> stringsMap;
  private List<String > stringsList;
  public void writeExternString(String s) throws IOException {
    writeTag(EXTERN_STRING);
    if(s == null) {
      writeTag(NULL) ;
      return;
    }
    if(stringsMap.containsKey(s)){
      writeInt(stringsMap.get(s));
    } else {
      writeStr(s);
      stringsCount++;
      if(stringsMap == null) stringsMap = new HashMap<String, Integer>();
      stringsMap.put(s,stringsCount);
    }

  }
  public String  readExternString(FastInputStream fis) throws IOException {
    Object o = readVal(fis);
    if(o == null) return null;
    if (o instanceof String) {
      String s = (String) o;
      if(stringsList == null ) stringsList = new ArrayList<String>();
      stringsList.add(s);
      return s;
    } else {// this must be an integer
      int index = (Integer)o;
      return stringsList.get(index);
    }
  }

{code}
  
> Support binary formats for QueryresponseWriter
> ----------------------------------------------
>
>                 Key: SOLR-486
>                 URL: https://issues.apache.org/jira/browse/SOLR-486
>             Project: Solr
>          Issue Type: Improvement
>          Components: clients - java, search
>            Reporter: Noble Paul
>            Assignee: Yonik Seeley
>             Fix For: 1.3
>
>         Attachments: SOLR-486.patch, solr-486.patch, SOLR-486.patch, 
> SOLR-486.patch, SOLR-486.patch, SOLR-486.patch, SOLR-486.patch, 
> SOLR-486.patch, SOLR-486.patch, SOLR-486.patch
>
>
> QueryResponse writer only allows text data to be written.
> So it is not possible to implement a binary protocol . Create another 
> interface which has a method 
> write(OutputStream os, SolrQueryRequest request, SolrQueryResponse response)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to