从巨大的(> 200MB)阵列文件加载随机对象而不加载整个阵列

时间:2018-06-05 22:31:59

标签: javascript arrays json angular typescript

我正在构建一个静态Angular网站,其数据基于来自包含超过200,000个JSON对象的大型数组中的1000个随机对象。我在网上某处以文本形式存储大量JSON对象(如Github或Dropbox),文本文件大小超过200MB。由于性能问题,显然不是加载网站中所有数据的选项,但我也不想使用数据库,因为我正在构建一个静态网站。如何在不加载整个数组的情况下,只从200,000个对象中随机加载1000个对象?

1 个答案:

答案 0 :(得分:3)

您可以尝试仅下载文件的第一个部分块并尝试使用它。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests

您可以使用Angular的HTTP服务发出 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-cassandra</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/com.datastax.cassandra/cassandra-driver-core --> <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>3.5.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.datastax.cassandra/cassandra-driver-mapping --> <!-- <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-mapping</artifactId> <version>3.5.0</version> </dependency> --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.2.1</version> </dependency> <!-- https://mvnrepository.com/artifact/com.datastax.spark/spark-cassandra-connector --> <dependency> <groupId>com.datastax.spark</groupId> <artifactId>spark-cassandra-connector_2.11</artifactId> <version>2.0.8</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.2.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 请求,但会将GET添加到标头中。其中Range: bytes=0-1023定义了您想要获取的字节数(使用开始和结束范围)。

如果服务器支持此功能,那么您必须清理从服务器获取的字符串JSON。由于JSON在完成之前将被切断。

我不知道JSON的结构是什么。如果这是一个实用的解决方案,但如果它是一个JSON对象数组,那么很难说。您可以尝试查找以数组分隔符0-1023字符结尾的字节范围,并将,附加到字符串的末尾。

如果您需要文件的随机部分。您将针对不同的部分块发出多个]请求,然后尝试清理JSON以使其有效。