D******y 发帖数: 3780 | 1 【 以下文字转载自 Programming 讨论区 】
发信人: DrDonkey (DrDonkey), 信区: Programming
标 题: 问个best practice
发信站: BBS 未名空间站 (Wed Jan 7 20:53:45 2009), 转信
有一个table Products.
要求用户在web上搜索后返回随机顺序, 而且显示的时候要求带paging
请问我该怎么作?
是该一次把数据都从DB读出来,Populate到Product的object里面, 然后放到一个Arra
yList里面,Shuffle, 再从ArrayList里面提取objects来implement paging? 或者只把
ProductID放到Session里面,不过这要是Products table太大,也不太现实阿
还是该一次只读一部分数据(Items Per Page), 这样是不是必须用TempTable了阿(
SELECT
, then shuffle, then insert into temptable), 那岂不是每个用户session都要一个
tem
ptab | l*s 发帖数: 783 | 2 第二种方式满足要求吗?只是在page items里shuffle而不是全部结果?
如果满足那是Time vs Space的考虑
Arra
【在 D******y 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 发信人: DrDonkey (DrDonkey), 信区: Programming : 标 题: 问个best practice : 发信站: BBS 未名空间站 (Wed Jan 7 20:53:45 2009), 转信 : 有一个table Products. : 要求用户在web上搜索后返回随机顺序, 而且显示的时候要求带paging : 请问我该怎么作? : 是该一次把数据都从DB读出来,Populate到Product的object里面, 然后放到一个Arra : yList里面,Shuffle, 再从ArrayList里面提取objects来implement paging? 或者只把 : ProductID放到Session里面,不过这要是Products table太大,也不太现实阿
| D******y 发帖数: 3780 | 3 thanks les
you are talking about using temp table?
i thought of select all records, then shuffle, then insert all record into a
temptable, so the records are all random sorted.
【在 l*s 的大作中提到】 : 第二种方式满足要求吗?只是在page items里shuffle而不是全部结果? : 如果满足那是Time vs Space的考虑 : : Arra
| l*s 发帖数: 783 | 4 问题是如果每次分页前先shuffle所有结果,那么用户选取第一次选取第二页的内容将
和第二次选取第二页的返回结果不一样。
你的第一种方法(shuffle所有结果进cache然后分页)没有问题。我只是不太清楚我是
否理解了你第二种方法
a
【在 D******y 的大作中提到】 : thanks les : you are talking about using temp table? : i thought of select all records, then shuffle, then insert all record into a : temptable, so the records are all random sorted.
| D******y 发帖数: 3780 | 5 the second apporach only shuffle the sequence once (and all), then each time
when select items for each page, no need shuffle again...
【在 l*s 的大作中提到】 : 问题是如果每次分页前先shuffle所有结果,那么用户选取第一次选取第二页的内容将 : 和第二次选取第二页的返回结果不一样。 : 你的第一种方法(shuffle所有结果进cache然后分页)没有问题。我只是不太清楚我是 : 否理解了你第二种方法 : : a
| l*s 发帖数: 783 | 6 第二种方法显然scalability差。
第一种方法如果data相对比较static,可以把所有数据放入singleton object或
application cache.然后每个用户的paged items放入context cache or object(not
session)
time
【在 D******y 的大作中提到】 : the second apporach only shuffle the sequence once (and all), then each time : when select items for each page, no need shuffle again...
| D******y 发帖数: 3780 | 7 hi les, thanks again.
ok, let's talk about the 1st approach more.
users need "search" the items by certain properties, do you mean I should
search the items against the cached data (contain all items), that will be
really slow comparing with search against DB, right?
but if I store the search results for each user into the cache, if I got too
many users, that's a lot of memory cost....
【在 l*s 的大作中提到】 : 第二种方法显然scalability差。 : 第一种方法如果data相对比较static,可以把所有数据放入singleton object或 : application cache.然后每个用户的paged items放入context cache or object(not : session) : : time
| l*s 发帖数: 783 | 8 Search against the cache object is not necessary to be slower than search against db considering there is less overhead(connection initialization,data transfer)
too
【在 D******y 的大作中提到】 : hi les, thanks again. : ok, let's talk about the 1st approach more. : users need "search" the items by certain properties, do you mean I should : search the items against the cached data (contain all items), that will be : really slow comparing with search against DB, right? : but if I store the search results for each user into the cache, if I got too : many users, that's a lot of memory cost....
| D******y 发帖数: 3780 | 9 so i should store "dataset" in the cache instead of list of my "objects",
right?
against db considering there is less overhead(connection initialization,data
transfer)
【在 l*s 的大作中提到】 : Search against the cache object is not necessary to be slower than search against db considering there is less overhead(connection initialization,data transfer) : : too
| l*s 发帖数: 783 | 10 It's up to you.
data
【在 D******y 的大作中提到】 : so i should store "dataset" in the cache instead of list of my "objects", : right? : : against db considering there is less overhead(connection initialization,data : transfer)
|
|