问题列表 - 第17005页

我应该如何在Delphi中实现一个巨大但简单的索引StringList?

我正在使用Delphi 2009.我有一个非常简单的数据结构,有2个字段:

  1. 一个字符串,它是我需要检索的关键字段,长度通常为4到15个字符.
  2. 一个字符串,它是可以是任意大小的数据字段,从1个字符到10,000个字符.

困难在于我可能有几百万条记录,因此它们的总大小可能超过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来使用数据库解决方案.

database delphi

4
推荐指数
2
解决办法
1415
查看次数

在Linux中编译Windows C控制台应用程序

我可以在Linux中编译Windows C控制台应用程序(.exe)吗?(更具体地说,Ubuntu)

我很久以前就听过交叉编译器,但当时我对它们并不感兴趣.

最好的祝福

c windows ubuntu

2
推荐指数
1
解决办法
2672
查看次数

在业务逻辑层中使用Entity Framework生成的类

我有一个使用三层架构的ASP.net(C#)项目.我开始在我的DAL中使用Entity Framework,问题是Entity Framework生成的类在业务逻辑层中可以使用的程度是多少?

最好直接使用它们,还是应该创建自己的业务对象并从Entity Framework(db-> O/RM-> BOs)映射到它们?

c# entity-framework business-logic-layer business-objects

6
推荐指数
1
解决办法
2835
查看次数

对象定位算法

我想知道这个问题是否有"最佳"解决方案:

我有焦虑(像素)大小的空间与p预先存在的矩形 - 各种大小的对象.现在我想在这个空间中放置q(相同大小)的新对象而不重叠.

我提出的算法:

  1. 使用大小创建数组A [] [] [(n)/(size_of_object_from_q)]x[(n)/(size_of_object_from_q)]
  2. 迭代p中的所有元素和每个元素:

    mark all fields in A[][] as occupied, where the element "lies"

  3. 将q中的所有元素放在A [] []中字段未标记的相应位置

(男孩,我希望我可以理解......)

有没有更好的方法来做到这一点?真的很感激任何帮助!

algorithm partitioning object

6
推荐指数
1
解决办法
1593
查看次数

莫里斯互联网蠕虫 - 任何人都知道他们是如何阻止它的?

是的,这一个家庭作业类型的问题,但你可以帮我解决一下吗?

在关于Morris Internet蠕虫主题的简短介绍中,我应该列出阻止蠕虫传播的步骤.我的pp幻灯片现在正在接近最终状态,但在我说这个那个是他们如何阻止蠕虫之前,我想和你联系.我听说这个蠕虫病毒在新闻发布时很长,当时在美国引起了很多轰动,所以我希望找到一些能够提供一些信息的计算领域的人.

基本上,我一直在各种报告和文章中发现,蠕虫的主要弱点pleasequit是没有正确初始化的变量,因此将此变量设置为-1足以阻止蠕虫.这是蠕虫的最后一击吗?这是否有效地阻止它传播?

我发现以下报告和其他人提到了pleasequit var :( 取自本网站):

蠕虫使用一个名为'pleasequit'的变量,但没有正确初始化它,因此有些人将一个名为_worm.o的模块添加到C库中,该模块由以下内容生成:

int pleasequit = -1; 
Run Code Online (Sandbox Code Playgroud)

此值设置为-1的事实将导致它在一次迭代后退出.

computer-forensics virus

-1
推荐指数
1
解决办法
1899
查看次数

PHP评论代码帮助

我正在编写我的第一个博客.在各种教程和其他论坛的帮助下,我设法收集了半工作代码.

现在我有一个代码,它接受并显示评论,但问题是协调哪些评论发布在哪个帖子上.我目前的设置是我的所有帖子都是HTML文件,评论存储在数据库中.我还有一个表单,用于为每个帖子创建一个具有唯一帖子ID和标题的新行.

我现在的基本数据库设置如下:1个数据库,2个表.邮政表和评论表.在评论表中,我有一般名称,网站,评论等,我还有一个唯一的ID,可以自动增加每个评论.然后我有一个post_id应该与指定的帖子匹配.

在post表上,我只有两个字段:entry_id和title.标题由我手动设置,entry_id自动递增.注意:条目本身不存储在数据库中.

所以我当前的问题是如何为每个评论页面设置post_id以及如何将entry_id与实际帖子相关联.我希望这不会太混乱.非常感谢您的帮助!

-iMaster

php mysql database blogs comments

4
推荐指数
1
解决办法
877
查看次数

Ant生成带有反斜杠而不是斜杠的jsfl

我正在使用Ant和FDT 3,我让Ant创建了一个jsfl来编译fla.当我在Ant中使用内置的'$ {basedir}'属性时,它给了我带有反斜杠(\)的路径,因为我在Windows上.问题是,当它通过jsfl时,斜杠被视为转义.我需要知道如何修改basedir属性,以便将斜杠转换为正斜杠.我试过在jsfl中将反斜杠分解为反斜杠,并使用正斜杠作为分隔符加入它,但反斜杠仍然会导致问题.

所以我需要知道的是如何更改Ant中的basedir以获得正斜杠?

ant fdt filepath

9
推荐指数
1
解决办法
6391
查看次数

有人做过boost :: asio的性能分析吗?

我需要类似套接字的本地IPC.我在Windows上使用了命名管道和重叠IO,我想将应用程序重写为boost :: ASIO,以便它也可以使用UNIX域套接字.

我最近审查了libevent库的部分内容,我知道它只支持1.4版本中的socket()和select().由于重叠的IO是非常有效的,因此将其排除显然是一个不可接受的特性,它在版本2(在alpha中)中得到了解决.次优执行的另一个例子是使用的红黑树与PRIO队列为其超时逻辑不客气沿线某处.

有没有人对boost vs libevent/libev的性能特征有任何意见.它在某些平台上是否有任何明显的不良特征?我对这个问题的目标是,除非我绝对必须,否则我不想对ASIO库进行操作.我想知道boost :: asio是否以最佳方式使用最优的OS原语.

performance benchmarking networking asynchronous boost-asio

15
推荐指数
2
解决办法
1万
查看次数

将文件路径拆分为iPhone SDK中的组件

是否有框架或库可用于将文件路径拆分为iPhone SDK中的组件?我知道我可以自己编码,但我不想重新发明轮子.

iphone split filepath

5
推荐指数
1
解决办法
3639
查看次数

新的没有分配足够的内存?

好吧,我正在直接从数据包中取出数据包并从中提取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)

c++ packets memcpy new-operator

1
推荐指数
1
解决办法
323
查看次数