(最初这是作为方法提示发布的,我的答案包含在问题中.我现在将我的答案分成下面的"答案"部分).
更具体:
假设您正在向用户显示一组记录,分为固定大小的页面(例如,Google搜索的结果).如果只有几页,您可以在结果的末尾显示一个页面导航区域,如下所示:
[<<] [<] 1 2 3 4 5 6 7 8 9 10 11 12 13 [>] [>>]
但如果结果超过20或30页,这很快就变得不合适了.
有时你会看到这样的事情:
[<<] [<] ... 665 666 667 668 669 670 671 672 673 ... [>] [>>]
或这个:
[<<] [<] 1 2 3 ... 667 668 669 670 671 ... 845 846 847 [>] [>>]
但是在这两种情况下,导航到"......"部分中间的任何地方都会需要很多很多的mousclicks.有时会提供用于直接输入页码的输入框; 否则(假设我们在这里谈论一个网页),精明的用户可能会查看URL以查看他们是否可以直接编辑它.
最好的方法是使用分页显示,让用户只需几次鼠标点击就可以访问任何页面,而不会有太多荒谬的链接.
如何最好地实现?
navigation paging user-interface pagination large-data-volumes
我有一个任务是将一个巨大的表转换为自定义XML文件.我将使用Java来完成这项工作.
如果我只是发出"SELECT*FROM customer",它可能会返回最终导致OOM的大量数据.我想知道,有没有办法可以立即处理记录,并在sql检索过程中从记忆中删除记录?
---于2009年7月13日编辑
让我详细说明我的问题.我有1个db服务器和1个应用服务器.当我在应用程序中发出选择查询时,数据将从数据库服务器传输到应用程序服务器.
我相信(如果我错了,请纠正我)ResultSet需要等到接收到查询中的所有记录.即使我们将获取大小设置为4,对于1000记录表,我们仍然最终在应用服务器的堆内存中有1000条记录,这是正确的吗?获取大小仅影响从/到数据库服务器的往返次数.
我的问题是,如何在它到达app服务器后立即开始处理该4个(或任何数字)记录,并将其丢弃以释放应用服务器中的内存?
我收集有基本上不能够经由POST使用REST或GET时被发送的数据量的限制.虽然我没有使用REST或Web服务,但似乎大多数服务涉及传输有限数量的数据.如果你想传输1-5MB的数据(在任何一个方向上),Web服务被认为是个坏主意吗?
更新:我们正在考虑通过REST服务连接的应用程序是内部应用程序.我们可以选择其他连接选项(即:RMI)
有一个1千兆字节的任意数据字符串,你可以认为它等同于:
1_gb_string=os.urandom(1*gigabyte)
Run Code Online (Sandbox Code Playgroud)
我们将搜索此字符串,1_gb_string以获得无限数量的固定宽度,1千字节模式,1_kb_pattern.每次我们搜索模式都会有所不同.所以缓存机会并不明显.将反复搜索相同的1千兆字节的字符串.这是一个简单的生成器来描述正在发生的事情:
def findit(1_gb_string):
1_kb_pattern=get_next_pattern()
yield 1_gb_string.find(1_kb_pattern)
Run Code Online (Sandbox Code Playgroud)
请注意,只需要找到第一次出现的模式.之后,不应该进行其他主要处理.
我能用什么比python的bultin找到更快的匹配1KB模式与1GB或更大的数据字符串?
(我已经知道如何拆分字符串并并行搜索它,因此您可以忽略该基本优化.)
更新:请将内存要求限制为16GB.
问题是,我们有大量的记录(超过一百万)从Java应用程序插入到单个表中.记录是由Java代码创建的,它不是从另一个表移动,所以INSERT/SELECT无济于事.
目前,我的瓶颈是INSERT语句.我正在使用PreparedStatement来加速这个过程,但我不能在普通服务器上每秒获得超过50个recods.该表根本不复杂,并且没有定义索引.
这个过程花费的时间太长,花费的时间会产生问题.
我该怎么做才能获得最大速度(INSERT每秒)?
数据库:MS SQL 2008.应用程序:基于Java,使用Microsoft JDBC驱动程序.
如果你在一个表中有这么多条目,那么2 ^ 32对于你在给定时期内(一天,一周,一个月......)的auto_increment ID是不够的呢?
如果MySQL提供的最大数据类型是不够的怎么办?
我想知道我应该如何解决我的表中添加了如此多的条目需要唯一ID的情况,但是我在一段时间内填写了我的数据类型?
我如何能够在MySQL(或任何其他系统)内部实现无限量的唯一ID,或至少以指数方式增加它?
理想情况下,我会期待类似的东西
> SELECT * FROM table;
+---+------+
| a | b |
+---+------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
|...| .... |
|...| .... |
| 1 | 2^32 |
| 2 | 1 |
| 2 | 2 |
+---+------+
Run Code Online (Sandbox Code Playgroud)
这会以指数方式增加条目数量.
你如何应对这种情况?
请记住 - 要求是为任何条目提供唯一ID.
摘要
我有一个快速变化的大型数据集,我希望将其绑定到UI(带有分组的Datagrid).这些变化分为两个层次;
数据的特征如下;
我遇到问题的关键要求;
我想做什么;
如果第1项具有属性状态,该状态从A - > B - > C - > D移动到我需要/仅想要引发一个"状态"改变事件的区间中,A-> D.
我感谢用户不需要每秒更新数千次UI.如果添加了一个项目,其状态已更改并在UI更新之间的N秒窗口内全部删除,则它永远不会访问DataGrid.
数据网格
DataGrid是我用来显示数据的组件.我目前正在使用XCeed DataGrid,因为它提供了简单的动态分组.我没有在情感上投入其中,如果我可以提供一些动态分组选项(其中包括经常更改的属性),那么股票DataGrid会很好.
我的系统中的瓶颈目前是在项目属性发生变化时重新排序所花费的时间
这占用了YourKit Profiler中98%的CPU.
用不同的方式来表达问题
给定两个BindingList/ObservableCollection实例,这些实例最初相同,但第一个列表已经有一系列额外的更新(您可以监听),生成最小的更改集以将一个列表转换为另一个列表.
外部阅读
我需要的是George Tryfonas 的这个ArrayMonitor的等价物,但是通用它来支持添加和删除项目(它们永远不会被移动).
NB我真的很感谢有人编辑问题的标题,如果他们能想到更好的总结.
编辑 - 我的解决方案
XCeed网格将单元格直接绑定到网格中的项目,而排序和分组功能由BindingList上引发的ListChangedEvents驱动.这有点直观,并排除了下面的MontioredBindingList,因为行将在组之前更新.
相反,我自己包装项目,捕获属性更改事件并将其存储在HashSet中,如Daniel建议的那样.这对我很有用,我会定期迭代这些项目并要求他们通知任何更改.
MonitoredBindingList.cs
这是我对绑定列表的尝试,可以轮询更新通知.可能有一些错误,因为它最终对我没用.
它创建一个添加/删除事件队列,并通过列表跟踪更改.ChangeList与基础列表具有相同的顺序,因此在我们通知添加/删除操作后,您可以针对正确的索引引发更改.
/// <summary>
/// A binding list which allows change events to be polled rather than pushed.
/// </summary>
[Serializable]
public class MonitoredBindingList<T> : BindingList<T>
{
private readonly object publishingLock = …Run Code Online (Sandbox Code Playgroud) 数据库:SQL Server 2005
问题:将值从一列复制到同一个表中的另一列,其中包含十亿+行.
test_table (int id, bigint bigid)
Run Code Online (Sandbox Code Playgroud)
事情尝试1:更新查询
update test_table set bigid = id
Run Code Online (Sandbox Code Playgroud)
填充事务日志并由于缺少事务日志空间而回滚.
尝试2 - 以下行的程序
set nocount on
set rowcount = 500000
while @rowcount > 0
begin
update test_table set bigid = id where bigid is null
set @rowcount = @@rowcount
set @rowupdated = @rowsupdated + @rowcount
end
print @rowsupdated
Run Code Online (Sandbox Code Playgroud)
上述过程随着进行而开始减慢.
尝试3 - 创建游标以进行更新.
通常不鼓励SQL Server文档,这种方法一次更新一行,这太耗时了.
是否有一种方法可以加速将值从一列复制到另一列.基本上我正在寻找一些"魔术"关键字或逻辑,它将允许更新查询按顺序一次撕掉50亿行.
任何提示,指针将非常感激.
我们正在设计一个大规模的网络抓取/解析项目.基本上,脚本需要浏览网页列表,提取特定标记的内容,并将其存储在数据库中.你会建议用什么语言大规模(数千万页?)..
我们正在将MongoDB用于数据库,因此任何具有可靠MongoDB驱动程序的东西都是优先考虑的.
到目前为止,我们一直在使用(不要笑)PHP,curl和Simple HTML DOM Parser,但我不认为它可以扩展到数百万个页面,特别是因为PHP没有适当的多线程.
我们需要一些易于开发的东西,可以在Linux服务器上运行,具有强大的HTML/DOM解析器以轻松提取该标签,并且可以在合理的时间内轻松下载数百万个网页.我们并不是真的在寻找网络抓取工具,因为我们不需要关注链接并索引所有内容,我们只需要从列表中的每个页面中提取一个标记.
我正在尝试创建一个Python脚本,该脚本将地址作为输入,并且会在多次匹配的情况下吐出其纬度和经度,或纬度和经度,就像Nominatim一样.
因此,可能的输入和输出可能是: -
在上面的6中,纽约被归还,因为找不到地址103 Alkazam, New York, USA,但它至少可以找到New York, USA.
最初我想到构建一个树,表示兄弟姐妹按字母顺序排序的层次结构关系.可能是这样的: -
GLOBAL
|
---------------------------------------------
| | ...
USA
---------------
| | ...
CALIFORNIA NEW YORK
| |
----------- -------------
| |.. | |....
PEARL STREET PEARL STREET
Run Code Online (Sandbox Code Playgroud)
但问题是用户可以提供不完整的地址,如2,4和5. …
python geocoding large-data-volumes large-data openstreetmap
sql ×3
java ×2
python ×2
sql-server ×2
algorithm ×1
bindinglist ×1
c# ×1
database ×1
geocoding ×1
large-data ×1
mysql ×1
navigation ×1
pagination ×1
paging ×1
parsing ×1
performance ×1
primary-key ×1
rest ×1
search ×1
t-sql ×1
web-services ×1
wpf ×1