在内存或客户端存储大型数据集

时间:2012-07-30 14:03:15

标签: .net sql-server webforms

我希望为.net网络表单中的一系列字段创建intellisense,这将使用户能够单击其中一个选项,这些选项将依次填写一系列字段(名称,地址等)。使用c#.net和ajax实现这一点非常简单。但是,最近我被迫加密了针对数据库搜索的一些关键字段,因此该功能现在已被破坏。我们解密这些可搜索字段的唯一方法是目前在C#.net。

为了修复这个功能,我想到了: a)当页面加载时,抓取所有记录并存储在内存中的数组中(未加密),并且搜索字段中的用户键使用linq或lambda来获取感兴趣的记录。 b)页面加载时,将所有记录存储在js数组中(未加密)并执行搜索客户端。

对于我的网络服务器与客户端浏览体验的性能考虑因素,哪条路线最佳?

我想这会是< 100k记录。

3 个答案:

答案 0 :(得分:1)

为什么不将记录存储在服务器缓存中并发出ajax请求。这样做会使记录集对所有用户可用。

答案 1 :(得分:1)

哇所以这是加密的动态数据。

在每个页面加载时向客户端发送大量记录会很慢。

您可以使用动态缓存,每隔几秒钟加载一次数据。

答案 2 :(得分:1)

每行多大? ~100k行可以是很多数据。

在客户端

客户端上的100k是很多数据,即使它是几列数据。那只是数据,然后是搜索它的问题。这是桌面浏览器上的一个问题。它将杀死移动浏览器。

在服务器上

这更合理。

需要考虑的事项:

  • 将所有结果加载到内存消耗多少内存?
  • 将所有记录加载到内存中的延迟(网络,数据库)是多少?也许可以做异步来减轻对用户的影响。
  • 在C#中搜索可能很快,特别是在使用字典时,它不如数据库快。您是否考虑过仅将需要解密的数据存储在内存中,并将其余数据保留在数据库中。在需要时从数据库中获取其余数据?

Ajax仍然可行(假设数据存储在服务器上)。您必须将搜索请求路由到适当的存储(在内存,数据库或两者的混合)。