有没有办法一次从数据库中获取所有数据并将其存储在本地并在本地获取

时间:2014-02-11 08:17:03

标签: database performance web kendo-ui kendo-grid

我正在开发一个包含100000条记录的MIS项目。我创建了一个编辑记录的页面,通常我使用ajax调用在'onload'事件中从数据库获取了kendo网格中的所有记录,之后我应用了一些过滤器来查看某些特定的记录/记录,但我的问题是那...

有没有办法一次性从数据库中获取所有数据并将其存储在本地,以便在我对数据应用过滤器(想要查看某些记录)时。它不会从数据库请求。它显示来自本地存储数据的数据。

2 个答案:

答案 0 :(得分:2)

我同意@OnaBai ..如果处理大量数据,它效率不高。在第一次加载时,将花费大量时间。无论如何,您可以设置serverPaging: false来实现这一目标。

dataSource: {

        serverPaging: false,
        pageSize: 20

    }

当您需要像往常一样访问数据时;

$("#YourGridName").data("kendoGrid").dataSource.data()

答案 1 :(得分:0)

是的,当然,您只需定义数据源(定义传输)。如果数据尚未获取,它将调用服务器。

如果您希望将其保留在本地,而不是每次过滤或排序时都再次访问服务器,则必须明确说出来:

// This DS will reach the server only for fetching... 
var fatDataSource = new kendo.data.DataSource({
    transport: {
        read: {
            url: ActionUrls.MonitoringReport.Alerts                
        }
    },
    // Specify that we want the operations locally
    serverSorting: false,
    serverFiltering: false,
    serverAggregates: false,
    serverPaging: false,
    serverGrouping: false
};

您可以使用数据执行任何操作,除非您明确调用read()方法,否则不需要访问服务器。

现在关于性能问题,我同意在某些情况下(IE抬起你的手),将整个数据库表提取到前端的想法可能会带来性能损失。但是,我不会评判你,我不知道你是在内联网还是你正在构建下一个谷歌。

我会给你一些提示(按照相关性顺序):

  • 请在网格中启用分页功能。如果要在内存中存储10000个项目数组,浏览器不会死亡。但是,如果您尝试渲染10000行表,IT将会死亡。正如您所见,分页将在本地完成,因此您不必担心任何进一步的Ajax请求。
  • 请为您的ajax响应启用GZIP压缩。您会看到网络规模减少约80%。
  • 请在到达数据库表之前放置缓存。不要杀死数据库服务器。
  • 如果记录数非常高,也许您应该考虑不要这样做:)