如何ServiceStack Redis的功能,在检索数据(How does ServiceStac

2019-10-17 01:43发布

不知道是否是对问题的最佳标题...也许有人可以给我改名?

我的问题是关于读取性能和数据在C#ServiceStack包装为Redis的组合和内部调用的工作方式。

我来解释一下两种方案,将在最终结果有望产生。 一种情况具有安装,这样的分类可以独立存于交易类ID的列表。

:我的最终目标是要检索具有类别“食物”的所有交易。

我曾尝试一些其他的点,其中透明度将有助于我的理解。 认为有是10,000个事务,平均3个类别每次交易了。

注意:在一个相关的问题ServiceStack.Net Redis的:存储与对象相关与IDS的对象但是没有解释的效率。

示例A

public class Transaction
{
    public List<string> CategoryIds;
}

实施例B

public class Transaction
{
    public List<string> CategoryNames;
}

var transactionClient = redisClient.GetTypedClient<Transaction>();

//1. is this inefficient returning all transactions?
//   is there any filtering available at this part?
var allTransactions = transactionClient.GetAll();

//2. In the case of Example A where the categories are stored as id's
//   how would I map the categories to a transaction?
//   maybe I have a List that has a container with the Transaction associated with a
//   list of Categories, however this seems inefficient as I would have to loop 
//   through all transactions make a call to get their Categories and then 
//   populate the container datatype.

//3. If we are taking Example B how can I efficiently just retrieve the transactions
//   where they have a category of food.

Answer 1:

效率是网络电话少 VS 更多的数据 。 在Redis的数据只是被blobbed,大多数时候一个API调用映射1:1与Redis的服务器操作。 这意味着你可以想想PERF影响,因为简单地下载从远程服务器的内存中的数据集的JSON BLOB和反序列化在客户端上 - 这是有效地所发生的一切。

在一些API如GETALL()它需要2个呼叫,1获取所有的id在实体集,另获取所有这些ID的记录。 在源代码Redis的客户是相当平易近人,所以我建议在看看,看看究竟发生了什么。

因为你只得到了3个类别,这并不是说你试图通过在服务器上过滤节省很多额外的数据。

所以,你的选择基本上是:

  • 下载整个实体数据集,并在客户端过滤
  • 维持从类别定制索引映射> IDS
  • 更多高级:使用服务器端LUA运行应用服务器端过滤(需要Redis的2.6)


文章来源: How does ServiceStack Redis function in retrieving data