我正在寻找有关如何使用python django框架处理以下用例场景的建议,我也愿意使用javascript libraries / ajax。
我正在使用名为revenue_code的预先存在的表/模型,其中包含超过6亿行数据。
用户需要在一次搜索中搜索三个字段(代码,描述,房间),并且能够选择多个类似于kendo控件多选的搜索结果。我首先通过组合django-filters中的代码开始,如下所示,但我的应用程序没有响应,等待10-15分钟后,我能够查看搜索结果但无法选择任何内容。
https://simpleisbetterthancomplex.com/tutorial/2016/11/28/how-to-filter-querysets-dynamically.html
我还尝试使用kendo控件,select2和选择,因为我需要用户能够选择尽可能多的转码,因为它们需要向上10-20,但是当它尝试时都会给出相同的无响应页面将数据加载到控件/多选中。
基本上我正在寻找的是下面的内容,它允许用户选择多个选项并处理大量数据而不会无响应?理想情况下,我希望能够在不显示所有数据的情况下查询我的搜索。
https://petercuret.com/add-ajax-to-django-without-writing-javascript/
Django框架是否意味着处理这种类型的卷。将此数据导出到文件并读取文件会更好吗?我不是在寻找代码,只是关于如何处理这个用例的一些指示。
答案 0 :(得分:2)
“搜寻6亿”的基本机制是什么?基本上数据库如何在搜索时间之前构建索引,并且对于不同类型的查询足够通用,然后在搜索时您只搜索索引 - 这要小得多(放入内存)并且更快。但无论如何,“搜索”其性质,没有“分页”的概念 - 如果600万条记录不能同时进入内存,那么需要多次交换并输入6亿条记录中的部分内容 - 更多部件然后操作越慢。这些隐藏在MySQL等数据库中的算法背后。
有一个非常紧凑的表示,如位图索引,可以让你非常快速地搜索男/女等数据,或者你可以使用每条信息一位的任何数据。
因此,无论Django与否,都不重要。重要的是调整数据库,设计表以便于查询(索引类型),以及服务器端的内存总量以将数据保存在内存中。
检查出来:
https://serverfault.com/questions/168247/mysql-working-with-192-trillion-records-yes-192-trillion
答案 1 :(得分:1)
您无法一次将所有数据加载到您的页面中。 6亿条记录太多了。
由于您提到了select2,请查看带有pagination的示例。
诀窍是一次将SQL结果限制在100左右。当用户滚动到列表底部时,它可以自动加载更多。
将搜索查询发送到服务器,并在SQL(或NoSQL或您使用的任何内容)中进行过滤。数据库引擎就是为此而构建的。不要尝试使用那么多记录在JS中进行过滤/排序。