Xpages 限制来自getAllEntries的NotesViewEntryCollection的最佳实践

Xpages 限制来自getAllEntries的NotesViewEntryCollection的最佳实践,xpages,lotus-notes,lotus-domino,Xpages,Lotus Notes,Lotus Domino,我想创建更好的web服务,通过分页显示NotesView中的集合 我发现了View.getAllEntries的一些性能问题 在MongoDB上,我可以将findAll()与skip()和limit()一起使用 如何在Domino上做到这一点?使用。如果要在大视图中分页,则它比查看.getAllEntries()要快得多。 您可以使用view.createViewNav()或类似方法获取ViewNavigator的实例。为了获得最佳性能,请在获取导航器之前调用view.setAutoUpdate

我想创建更好的web服务,通过分页显示NotesView中的集合

我发现了View.getAllEntries的一些性能问题

在MongoDB上,我可以将findAll()与skip()和limit()一起使用

如何在Domino上做到这一点?

使用。如果要在大视图中分页,则它比查看.getAllEntries()要快得多。

您可以使用
view.createViewNav()
或类似方法获取
ViewNavigator
的实例。为了获得最佳性能,请在获取导航器之前调用
view.setAutoUpdate(false)

你可以通过搜索网页找到更多的信息。看起来是个不错的起点。

使用。如果要在大视图中分页,则它比查看.getAllEntries()要快得多。

您可以使用
view.createViewNav()
或类似方法获取
ViewNavigator
的实例。为了获得最佳性能,请在获取导航器之前调用
view.setAutoUpdate(false)


你可以通过搜索网页找到更多的信息。看起来是一个很好的起点。

下面的函数从视图中获取所有Allentry,输出结果为JSON对象。请尝试以下方法,并让我知道它是否有效

private String consultView(View view, int counter,int position) throws Exception{
    String strValue = "";
    ViewNavigator nav;
    int count = 0;
    view.setAutoUpdate(false);
    nav = view.createViewNav();
    nav.setEntryOptions(ViewNavigator.VN_ENTRYOPT_NOCOUNTDATA);
    nav.setBufferMaxEntries(400);
    int limit = counter;
    int skippedEntries = nav.skip(position);
    String number = "";
    int inde = 111;
    if (skippedEntries == position) {
        Map<Integer, String> columnNameMap = new HashMap<Integer, String>();
        for (ViewColumn col : (List<ViewColumn>) view.getColumns()) {
            if (col.getColumnValuesIndex() < 65535 && Utilisties.containsVar(viewObject.getRetCols(), col.getItemName())) {
                columnNameMap.put(col.getColumnValuesIndex(), col.getItemName());
            }
        }
        List nodeData = new ArrayList();
        ViewEntry entry = nav.getCurrent();
        while (entry != null && count <= (limit - 1)) {
            if (!entry.isCategory()) {
                try {
                    HashMap<String, Object> entryMap = new HashMap<String, Object>();
                    count++;
                    List<Object> columnValues = entry.getColumnValues();
                    entryMap.put("unid", entry.getUniversalID());
                    entryMap.put("position", entry.getPosition('.'));
                    entryMap.put("pos",  entry.getPosition('.'));
                    entryMap.put("userpos", count);
                    for (Integer index : columnNameMap.keySet())
                        entryMap.put(columnNameMap.get(index).toString(),columnValues.get(index));

                    nodeData.add(entryMap);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            ViewEntry tmpentry = nav.getNext(entry);
            entry.recycle();
            entry = tmpentry;
        }
        JsonJavaObject returnJSON = new JsonJavaObject();
        returnJSON.put("errorcode", 0);
        returnJSON.put("errormessage", "");
        if(viewObject.getGetCount())
                returnJSON.put("total",getViewCount(view));

        returnJSON.put("data", nodeData);
        strValue = returnJSON.toString();
    }
    nav.recycle();
    view.recycle();

    return strValue;
private String consultView(视图视图、int计数器、int位置)引发异常{
字符串strValue=“”;
视图导航器导航;
整数计数=0;
view.setAutoUpdate(false);
nav=view.createViewNav();
nav.setEntryOptions(ViewNavigator.VN_ENTRYOPT_NOCOUNTDATA);
资产净值(400);
int limit=计数器;
int skipedentries=nav.skip(位置);
字符串编号=”;
int inde=111;
if(skippedEntries==位置){
Map columnNameMap=新建HashMap();
for(ViewColumn col:(List)view.getColumns(){
if(col.getColumnValuesIndex()<65535&&Utilities.containsVar(viewObject.getRetCols(),col.getItemName()){
columnNameMap.put(col.getColumnValuesIndex(),col.getItemName());
}
}
List nodeData=new ArrayList();
ViewEntry=nav.getCurrent();

while(entry!=null&&count下面的函数从视图中获取所有Allentry,输出结果为JSON对象。请尝试以下操作,并告诉我它是否有效

private String consultView(View view, int counter,int position) throws Exception{
    String strValue = "";
    ViewNavigator nav;
    int count = 0;
    view.setAutoUpdate(false);
    nav = view.createViewNav();
    nav.setEntryOptions(ViewNavigator.VN_ENTRYOPT_NOCOUNTDATA);
    nav.setBufferMaxEntries(400);
    int limit = counter;
    int skippedEntries = nav.skip(position);
    String number = "";
    int inde = 111;
    if (skippedEntries == position) {
        Map<Integer, String> columnNameMap = new HashMap<Integer, String>();
        for (ViewColumn col : (List<ViewColumn>) view.getColumns()) {
            if (col.getColumnValuesIndex() < 65535 && Utilisties.containsVar(viewObject.getRetCols(), col.getItemName())) {
                columnNameMap.put(col.getColumnValuesIndex(), col.getItemName());
            }
        }
        List nodeData = new ArrayList();
        ViewEntry entry = nav.getCurrent();
        while (entry != null && count <= (limit - 1)) {
            if (!entry.isCategory()) {
                try {
                    HashMap<String, Object> entryMap = new HashMap<String, Object>();
                    count++;
                    List<Object> columnValues = entry.getColumnValues();
                    entryMap.put("unid", entry.getUniversalID());
                    entryMap.put("position", entry.getPosition('.'));
                    entryMap.put("pos",  entry.getPosition('.'));
                    entryMap.put("userpos", count);
                    for (Integer index : columnNameMap.keySet())
                        entryMap.put(columnNameMap.get(index).toString(),columnValues.get(index));

                    nodeData.add(entryMap);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            ViewEntry tmpentry = nav.getNext(entry);
            entry.recycle();
            entry = tmpentry;
        }
        JsonJavaObject returnJSON = new JsonJavaObject();
        returnJSON.put("errorcode", 0);
        returnJSON.put("errormessage", "");
        if(viewObject.getGetCount())
                returnJSON.put("total",getViewCount(view));

        returnJSON.put("data", nodeData);
        strValue = returnJSON.toString();
    }
    nav.recycle();
    view.recycle();

    return strValue;
private String consultView(视图视图、int计数器、int位置)引发异常{
字符串strValue=“”;
视图导航器导航;
整数计数=0;
view.setAutoUpdate(false);
nav=view.createViewNav();
nav.setEntryOptions(ViewNavigator.VN_ENTRYOPT_NOCOUNTDATA);
资产净值(400);
int limit=计数器;
int skipedentries=nav.skip(位置);
字符串编号=”;
int inde=111;
if(skippedEntries==位置){
Map columnNameMap=新建HashMap();
for(ViewColumn col:(List)view.getColumns(){
if(col.getColumnValuesIndex()<65535&&Utilities.containsVar(viewObject.getRetCols(),col.getItemName()){
columnNameMap.put(col.getColumnValuesIndex(),col.getItemName());
}
}
List nodeData=new ArrayList();
ViewEntry=nav.getCurrent();
while(entry!=null&&count
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入com.ibm.commons.util.io.json.JsonJavaObject;
导入lotus.domino.NotesException;
导入lotus.domino.View;
导入lotus.domino.ViewColumn;
导入lotus.domino.ViewEntryCollection;
导入lotus.domino.ViewNavigator;
导入lotus.domino.ViewEntry;
私有字符串consultView(视图视图、int计数器、int位置)引发异常{
字符串strValue=“”;
视图导航器导航;
整数计数=0;
view.setAutoUpdate(false);
nav=view.createViewNav();
nav.setEntryOptions(ViewNavigator.VN_ENTRYOPT_NOCOUNTDATA);
资产净值(400);
int limit=计数器;
int skipedentries=nav.skip(位置);
字符串编号=”;
if(skippedEntries==位置){
Map columnNameMap=新建HashMap();
for(ViewColumn col:(List)view.getColumns(){
if(列getColumnValuesIndex()<65535){
columnNameMap.put(col.getColumnValuesIndex(),col.getItemName());
}
}
List nodeData=new ArrayList();
ViewEntry=nav.getCurrent();
while(entry!=null&&count
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入com.ibm.commons.util.io.json.JsonJavaObject;
导入lotus.domino.NotesException;
导入lotus.domino.View;
导入lotus.domino.ViewColumn;
导入lotus.domino.ViewEntryCollection;
导入lotus.domino.ViewNavigator;
导入lotus.domino.ViewEntry;
私有字符串consultView(视图视图、int计数器、int位置)引发异常{
字符串strValue=“”;
视图导航器导航;
整数计数=0;
view.setAutoUpdate(false);
nav=view.createViewNav();
nav.setEntryOptions(ViewNavigator.VN_ENTRYOPT_NOCOUNTDATA);
资产净值(400);
int limit=计数器;
int skipedentries=nav.skip(位置);
字符串编号=”;
if(skippedEntries==位置){
Map columnNameMap=新建HashMap();
for(ViewColumn col:(List)view.getColumns(){
if(列getColumnValuesIndex()<65535){
columnNameMap.put(col.getColumnValuesIndex(),col.getItemName());
}
}
List nodeData=new ArrayList();
ViewEntry=nav.getCurrent();
while(进入)