`

Neo4j: Streaming JSON responses

 
阅读更多

To lift server performance, when we query some data and result is hug,  in which case,  large memory will be used to produce the result json string. 

One solution is to use streaming JSON responses.

 @Path("/fof/{userName}")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getFOF(final @PathParam("userName") String userName) throws JSONException {
 	StreamingOutput stream = new StreamingOutput() {
	    @Override
	    public void write(OutputStream os) throws IOException, WebApplicationException {
		// TODO Auto-generated method stub
		JsonGenerator jg = objectMapper.getJsonFactory().createJsonGenerator(os, JsonEncoding.UTF8);
		jg.writeStartObject();
		jg.writeFieldName("fofs");
		jg.writeStartArray();

		try (Transaction tx = template.getGraphDatabaseService().beginTx()) {
		    Iterable<User> fofs = userRepo.getFriendsOfFriends(userName);
		    Iterator<User> it = fofs.iterator();
		    while (it.hasNext()) {
			User fof = it.next();
//			jg.writeString(fof.getName());
			jg.writeObject(fof);
		    }
		    tx.success();

		    jg.writeEndArray();
		    jg.writeEndObject();
		    jg.flush();
		    jg.close();
		}
	    }
	};

	return Response.ok().entity(stream).type(MediaType.APPLICATION_JSON).build();
    }

 

 

Warning:  jg.writeObject(fof)  will write the whole user object to result, which is not my expected.  I just want to partial properties in the User object while ingore others. How to satisify my needs?

 

the similar commands are

http://stackoverflow.com/questions/20978383/convert-same-pojo-into-json-and-xml-but-ignore-some-properties-for-json

https://github.com/FasterXML/jackson-databind/issues/95

 

The simple way is to manually marshell you expected properties likes 

			jg.writeStartObject();
			jg.writeFieldName("name");
			jg.writeString(fof.getName());
			jg.writeFieldName("phoneNum");
			jg.writeString(fof.getPhoneNumber());
			jg.writeEndObject();

 

The result json  for query 

curl http://localhost:7474/fifo/user/fof/liwk

 is

{"fofs":[{"name":"losiy","phoneNum":"15658653696"},{"name":"jack","phoneNum":null}]}

 

 

 

 

 

 

References

http://neo4j.com/docs/stable/server-unmanaged-extensions.html#server-unmanaged-extensions-streaming

 

 

 

分享到:
评论

相关推荐

    vue-neo4j:vue使用D3对neo4 j进行可视化-源码开发技术-其它

    Neo4j Vue 安装步骤 克隆或下载该库到本地 下载neo4j并安装到本地,启动neo4j服务 进入到该工程的根目录,输入命令:npm run update进行npm包的导入 使用命令:npm run dev启动该工程 默认端口是:8081 neo4j账号...

    vue-neo4j:vue使用D3对neo4j进行可视化源码开发技术-其它

    Neo4j Vue 安装步骤 克隆或下载该库到本地 下载neo4j并安装到本地,启动neo4j服务 进入到该工程的根目录,输入命令:npm run update进行npm包的导入 使用命令:npm run dev启动该工程 默认端口是:8081 neo4j账号...

    sails-restful-neo4j:SailsWaterline RESTful Neo4j 适配器

    connections = { default : 'restful-neo4j' , restful - neo4j : { module : 'sails-restful-neo4j' , type : 'json' , // expected response type (json | string | http) host : 'foo.myneo4j.com' , //

    movies-java-spring-data-neo4j:使用Spring Data Neo4j的Neo4j电影示例

    电影示例应用 如何一起使用Spring Boot,Spring Data和Neo4j。 Spring Data Neo4j可以在基于Spring的应用程序中方便地集成Neo4j。 它提供了对象图映射(OGM)功能以及Spring Data项目共有的其他功能。 笔记该项目...

    vue-neo4j:vue使用D3对neo4j进行可视化

    Neo4j Vue安装步骤克隆或下载该库到本地下载neo4j并安装到本地,启动neo4j服务进入到该工程的根目录,输入命令:npm run update进行npm包的导入使用命令:npm run dev启动该工程默认端口是:8081 neo4j账号信息: ...

    neo4j-jdbc:带有BOLT协议的Neo4j 3.x的Neo4j JDBC驱动程序

    该驱动程序支持各种类型的数据库传输: 通过使用jdbc:neo4j:bolt://&lt;host&gt;:&lt;port&gt;/的Bolt协议(3.0.x至3.2.x) 通过使用jdbc:neo4j:http://&lt;host&gt;:&lt;port&gt;/的HTTP协议(2.x +) 展望未来,还将支持: 直接文件连接...

    bitnami-docker-neo4j:Neo4j的Bitnami Docker映像

    DR $ docker run --name neo4j bitnami/neo4j:latestDocker撰写$ curl -sSL https://raw.githubusercontent.com/bitnami/bitnami-docker-neo4j/master/docker-compose.yml &gt; docker-compose.yml$ docker-compose up...

    email2neo4j:使用一个简单的命令将您的电子邮件导入图表

    imap2neo4j: imap2neo4j imapServer imapUsername imapPassword imapMailbox neo4jServer [neo4jUsername] [neo4jPassword] [paging, eg import by batches of 1000] [specific range of messages, eg 50

    Nested-Class-Models-Rest-Api-Neo4j:在休息环境中作为 neo4j 扩展实现的嵌套类模型

    通过在 conf/neo4j-server.properties 中添加一行来配置 Neo4j: org.neo4j.server.thirdparty_jaxrs_classes=org.neo4j.example.unmanagedextension=/example 启动 Neo4j 服务器。 写评论 curl ...

    Sublime-Neo4j:用于运行 Neo4j Cypher 查询的 Sublime 插件

    Sublime Text 2/3 插件:Neo4j Sublime 是最好的跨平台编辑器之一,所以我想为什么不创建一个简单的 Neo4j 插件呢?... 编辑用户名和密码(默认为neo4j:neo) 结果显示在控制台中(Ctrl+~)打开C

    neo4j-community-3.5.12-windows.zip

    **Neo4J社区版3.5.12 Windows安装与使用指南** Neo4J是一款流行的图数据库管理系统,尤其适用于处理复杂关系数据。图数据库利用图形结构来存储和查询数据,其核心理念是节点、边(关系)和属性,这使得在处理网络、...

    schemaless-graphql-neo4j:将无类型和动态GraphQL查询转换为Cypher

    schemaless-graphql-neo4j 将无类型的动态GraphQL查询转换为Cypher。 签出,以更好地查看您可以编写的查询。入门$ npm install schemaless-graphql-neo4j :warning: 图书馆尚未发布操场您可以开始使用开发人员游乐场...

    nodejs-on-neo4j:Neo4j上的NodeJS的简单PoC

    **Node.js on Neo4j: 在图形数据库上构建应用** 标题中的"nodejs-on-neo4j"指的是一项使用Node.js与Neo4j图形数据库交互的实践项目。这个项目通常涉及利用Node.js的灵活性和Neo4j的强大图数据处理能力来开发应用...

    egg-neo4j:Neo4j鸡蛋插件

    egg-neo4j Neo4j用于鸡蛋框架。安装$ npm i egg-neo4j --save用法// {app_root}/config/plugin.jsexports . neo4j = { enable : true , package : 'egg-neo4j' ,} ;配置// {app_root}/config/config.default....

    neo4j:所有人的图表

    【标题】"neo4j:所有人的图表"指的是开源图数据库管理系统Neo4j,它将数据以图形结构的形式存储和处理,便于理解复杂的关系。在信息化时代,数据之间的关联性日益增强,图数据库如Neo4j应运而生,成为理解和分析...

    spring-graph-neo4j:Neo4j的春天

    标题中的“spring-graph-neo4j:Neo4j的春天”暗示了我们将探讨Spring框架与图数据库Neo4j的结合使用。在Java开发领域,Spring框架是一个广泛使用的开源框架,它提供了一整套用于构建企业级应用的服务和工具。而Neo4j...

    NBD_Tutorials_Neo4J:PJATK NDB教程的Neo4J分配

    【标题】:“NBD_Tutorials_Neo4J:PJATK NDB教程的Neo4J分配” 【描述】:“NBD_Tutorials_Neo4J”指的是一个关于使用Neo4J数据库进行数据处理和分析的教程,特别关注的是与PJATK(Probabilistic Joint Anomaly ...

    Laravel开发-neo4j-php-ogm

    'Neo4j' =&gt; Neo4j\OGM\Facades\Neo4j::class, ], ``` 5. **配置服务**:在`app/Providers/AppServiceProvider.php`的`boot`方法中加载配置文件和启动Neo4j客户端: ```php public function boot() { $this-&gt;app-&gt;...

    docker-neo4j:运行 Neo4j 容器的镜像

    Neo4j Neo4j 是一个高度可扩展、健壮(完全 ACID)的原生图形数据库。 Neo4j 被全球数以千计的领先企业、初创公司、企业和政府用于任务关键型应用程序。 使用存储库上的 Dockerfile,您就可以使用 docker neo4j ...

    streams-persist-neo4j:Neo4j扩展需要针对Apache流的GPL

    标题中的"streams-persist-neo4j:Neo4j扩展需要针对Apache流的GPL"指出,这是一款与Apache流相关的Neo4j扩展项目,它可能是一个库或者框架,用于将数据流式处理到Neo4j数据库中。"GPL"则表示这个项目遵循的是GNU ...

Global site tag (gtag.js) - Google Analytics