深层“缓存”层中的实时查询?

时间:2016-12-27 23:52:19

标签: deepstream.io

我看到,通过使用RethinkDB连接器,可以通过订阅特定命名的列表来实现实时查询功能。我假设,这实际上并不是最快的解决方案,因为查询可能仅在将记录更改写入数据库后才更新。是否有任何推荐的方法来实现深流端的实时查询功能?

有一些有利的属性,如:

  • 与记录数量或连接客户端数量相比,唯一查询数量较少
  • 所有对要查询的记录的操作都是通过RPC完成的。

我可以想象多种方法:

  • 模仿rethinkdb连接器方法。但为此我缺少list.listen()方法。有了这个,我就可以创建一个后端进程,按需创建列表,并在记录上的每个RPC CRUD操作上更新所有当前活动的列表=查询。

  • 重新实现记录中的基本列表功能,并使用上述方法,现在已存在.listen()

  • 在事件中使用.listen()?

或者我们有list.listen()而我错过了吗?或者有更优雅的方式怎么做?

1 个答案:

答案 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的内置订阅功能进行更改通知。