我正在使用Delphi 2009.我有一个非常简单的数据结构,有2个字段:
困难在于我可能有几百万条记录,因此它们的总大小可能超过10 GB.显然,我正在寻找一种磁盘解决方案,而不是内存解决方案.
我的程序需要根据关键字段随机检索这些记录.这就是需要尽可能高效的部分.
我应该将数据库用于这样一个简单的结构吗?如果是这样,哪个数据库最好处理这个并且最简单的实现?
或者,是否有一个简单的磁盘上数据结构,不需要一个完整的数据库,也可以工作?
好吧,我所需要的只是让我回到现实的一个答案.我一直在寻找比简单数据库更简单的东西.但是,如果不使用数据库,那么我意识到我已经用自己对另一个问题的答案回答了这个问题:小应用程序和工具的最佳数据库.
我的回答是DISQLite3为我指定有原因.这就是我实施的可能性.
一些可能的更好的答案.那很棒.我将能够尝试一些不同的方法来看看什么效果最好.
更多的考虑,我不得不改变GpStructuredStorage解决方案的接受答案.
就我而言,总计几千兆字节的一百万条记录将对数据库结构造成压力.具体来说,用于在大多数数据库中存储索引的B*树速度很快,但对于某些操作(如重新索引一百万个值)会减慢.
对于索引,你唯一能找到比B*更快的东西就是哈希表.这正是gabr建议添加到GpStructuredStorage解决方案中所提供的内容.我认为它将哈希值分段为一个4级目录结构的方式非常优雅.
我可以使用哈希解决方案的关键原因是我只需要通过密钥随机访问.我不需要按键排序.如果需要排序,则哈希表的速度增益将会丢失,数据库系统将成为无脑的赢家.
当我开始实现这个时,我应该对这个技术与数据库进行比较.也许我会与Firebird和SQLite进行比较,这两者都是值得对手的.
另外一个跟进:
我刚刚发现了A. Bouchez的Synopse Big Table,它专为速度而设计,几乎可以准确地满足我的问题规格.当我在几个月内完成实施时,我会先尝试一下,然后在这里报告我的结果.
稍后的后续(2015年7月)
我从未尝试过Synopse Big Table.到目前为止,我一直坚持使用我的B*树.但现在我升级到Delphi XE8并计划使用FireDAC和SQLite来使用数据库解决方案.
我可以在Linux中编译Windows C控制台应用程序(.exe)吗?(更具体地说,Ubuntu)
我很久以前就听过交叉编译器,但当时我对它们并不感兴趣.
最好的祝福
我有一个使用三层架构的ASP.net(C#)项目.我开始在我的DAL中使用Entity Framework,问题是Entity Framework生成的类在业务逻辑层中可以使用的程度是多少?
最好直接使用它们,还是应该创建自己的业务对象并从Entity Framework(db-> O/RM-> BOs)映射到它们?
我想知道这个问题是否有"最佳"解决方案:
我有焦虑(像素)大小的空间与p预先存在的矩形 - 各种大小的对象.现在我想在这个空间中放置q(相同大小)的新对象而不重叠.
我提出的算法:
[(n)/(size_of_object_from_q)]x[(n)/(size_of_object_from_q)]迭代p中的所有元素和每个元素:
mark all fields in A[][] as occupied, where the element "lies"
将q中的所有元素放在A [] []中字段未标记的相应位置
(男孩,我希望我可以理解......)
有没有更好的方法来做到这一点?真的很感激任何帮助!
是的,这是一个家庭作业类型的问题,但你可以帮我解决一下吗?
在关于Morris Internet蠕虫主题的简短介绍中,我应该列出阻止蠕虫传播的步骤.我的pp幻灯片现在正在接近最终状态,但在我说这个或那个是他们如何阻止蠕虫之前,我想和你联系.我听说这个蠕虫病毒在新闻发布时很长,当时在美国引起了很多轰动,所以我希望找到一些能够提供一些信息的计算领域的人.
基本上,我一直在各种报告和文章中发现,蠕虫的主要弱点pleasequit是没有正确初始化的变量,因此将此变量设置为-1足以阻止蠕虫.这是蠕虫的最后一击吗?这是否有效地阻止它传播?
我发现以下报告和其他人提到了pleasequit var :( 取自本网站):
蠕虫使用一个名为'pleasequit'的变量,但没有正确初始化它,因此有些人将一个名为_worm.o的模块添加到C库中,该模块由以下内容生成:
Run Code Online (Sandbox Code Playgroud)int pleasequit = -1;此值设置为-1的事实将导致它在一次迭代后退出.
我正在编写我的第一个博客.在各种教程和其他论坛的帮助下,我设法收集了半工作代码.
现在我有一个代码,它接受并显示评论,但问题是协调哪些评论发布在哪个帖子上.我目前的设置是我的所有帖子都是HTML文件,评论存储在数据库中.我还有一个表单,用于为每个帖子创建一个具有唯一帖子ID和标题的新行.
我现在的基本数据库设置如下:1个数据库,2个表.邮政表和评论表.在评论表中,我有一般名称,网站,评论等,我还有一个唯一的ID,可以自动增加每个评论.然后我有一个post_id应该与指定的帖子匹配.
在post表上,我只有两个字段:entry_id和title.标题由我手动设置,entry_id自动递增.注意:条目本身不存储在数据库中.
所以我当前的问题是如何为每个评论页面设置post_id以及如何将entry_id与实际帖子相关联.我希望这不会太混乱.非常感谢您的帮助!
-iMaster
我正在使用Ant和FDT 3,我让Ant创建了一个jsfl来编译fla.当我在Ant中使用内置的'$ {basedir}'属性时,它给了我带有反斜杠(\)的路径,因为我在Windows上.问题是,当它通过jsfl时,斜杠被视为转义.我需要知道如何修改basedir属性,以便将斜杠转换为正斜杠.我试过在jsfl中将反斜杠分解为反斜杠,并使用正斜杠作为分隔符加入它,但反斜杠仍然会导致问题.
所以我需要知道的是如何更改Ant中的basedir以获得正斜杠?
我需要类似套接字的本地IPC.我在Windows上使用了命名管道和重叠IO,我想将应用程序重写为boost :: ASIO,以便它也可以使用UNIX域套接字.
我最近审查了libevent库的部分内容,我知道它只支持1.4版本中的socket()和select().由于重叠的IO是非常有效的,因此将其排除显然是一个不可接受的特性,它在版本2(在alpha中)中得到了解决.次优执行的另一个例子是使用的红黑树与PRIO队列为其超时逻辑不客气沿线某处.
有没有人对boost vs libevent/libev的性能特征有任何意见.它在某些平台上是否有任何明显的不良特征?我对这个问题的目标是,除非我绝对必须,否则我不想对ASIO库进行操作.我想知道boost :: asio是否以最佳方式使用最优的OS原语.
是否有框架或库可用于将文件路径拆分为iPhone SDK中的组件?我知道我可以自己编码,但我不想重新发明轮子.
好吧,我正在直接从数据包中取出数据包并从中提取TCP流.
简而言之,这意味着剥离各种标题(例如,eth-> IP-> TCP->流数据).
在我最终通过所有标题时调用的函数中,我遇到了一个奇怪的错误.
/*Meta is a pointer to the IP header, pkt is a pointer to the TCP header*/
virtual const u_char* processPacket(const u_char* pkt, const u_char* meta) {
//Extract IP info from meta.
iphdr* metaHdr = (iphdr*)meta;
//Form TCP header from the current offset, hdr.
const tcphdr* hdr = (const tcphdr*)pkt;
//Do pointer math to figure out the size of the stream data.
u_int32_t len = ntohs(metaHdr->tot_len) - metaHdr->ihl*4 - hdr->doff*4;
if(len > 0)
{
//Store TCP …Run Code Online (Sandbox Code Playgroud) database ×2
filepath ×2
algorithm ×1
ant ×1
asynchronous ×1
benchmarking ×1
blogs ×1
boost-asio ×1
c ×1
c# ×1
c++ ×1
comments ×1
delphi ×1
fdt ×1
iphone ×1
memcpy ×1
mysql ×1
networking ×1
new-operator ×1
object ×1
packets ×1
partitioning ×1
performance ×1
php ×1
split ×1
ubuntu ×1
virus ×1
windows ×1