我看到,通过使用RethinkDB连接器,可以通过订阅特定命名的列表来实现实时查询功能。我假设,这实际上并不是最快的解决方案,因为查询可能仅在将记录更改写入数据库后才更新。是否有任何推荐的方法来实现深流端的实时查询功能?
有一些有利的属性,如:
我可以想象多种方法:
模仿rethinkdb连接器方法。但为此我缺少list.listen()方法。有了这个,我就可以创建一个后端进程,按需创建列表,并在记录上的每个RPC CRUD操作上更新所有当前活动的列表=查询。
重新实现记录中的基本列表功能,并使用上述方法,现在已存在.listen()
在事件中使用.listen()?
或者我们有list.listen()而我错过了吗?或者有更优雅的方式怎么做?
答案 0 :(得分:0)
很棒的问题 - 通常列表是一个客户端概念,在记录之上实现。 Listen会通知您有关订阅记录的客户,而不一定要更改这些记录 - 更改通知会通过public class FirstMain {
public FirstMain() {
// TODO Auto-generated constructor stub
}
public static void compressFolder(String sourceFolder, String absoluteZipfilepath)
{
try
{
ScatterSample scatterSample=new ScatterSample();
File srcFolder = new File(sourceFolder);
if(srcFolder != null && srcFolder.isDirectory())
{
Iterator<File> i = FileUtils.iterateFiles(srcFolder, new String []{"pdf"}, true);
File zipFile = new File(absoluteZipfilepath);
OutputStream outputStream = new FileOutputStream(zipFile);
ZipArchiveOutputStream zipArchiveOutputStream= new ZipArchiveOutputStream(outputStream);
int srcFolderLength = srcFolder.getAbsolutePath().length() + 1; // +1 to remove the last file separator
while(i.hasNext())
{
File file = i.next();
String relativePath = file.getAbsolutePath().substring(srcFolderLength);
InputStreamSupplier streamSupplier=new InputStreamSupplier(){
@Override
public InputStream get() {
// TODO Auto-generated method stub
return null;
}
};
ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(relativePath);
scatterSample.addEntry(zipArchiveEntry, streamSupplier);
}
scatterSample.writeTo(zipArchiveOutputStream);
}
}catch (Exception e) {
e.printStackTrace();
}
}
public static void main( String[] args )
{
compressFolder("C:\\Users\\akatm\\Desktop\\Stuff\\zipdata\\Newtry\\","C:/Users/akatm/Desktop/Stuff/Newtry.zip");
}
}
或mylist.subscribe(data => {})
到达。
棘手的一点是缓存的查询能力非常有限。 Redis有一个二级索引的基本概念,可以搜索范围和交集,memcached和co是我所知的纯键值存储,只能通过ID搜索 - 因此实际查询在数据库层上最有意义您的数据通常会在不到200毫秒的时间内到达。
RethinkDB搜索提供程序支持RethinkDB内置的实时查询功能。或者,您可以使用MongoDB并跟踪其操作日志,或使用PostGres和deepstream的内置订阅功能进行更改通知。