小编Gre*_*her的帖子

PostgreSQL:GIN还是GiST索引?

根据我能找到的信息,他们都解决了同样的问题 - 更多深奥的操作,如数组包含和交集(&&,@>,<@等).但是我会对何时使用其中一个(或两者都不可能)的建议感兴趣.
PostgreSQL文档大约有一些这方面的信息:

  • GIN索引查找速度比GiST快三倍
  • GIN索引的构建时间比GiST长大约三倍
  • GIN索引的更新速度比GiST慢十倍
  • GIN索引比GiST大两到三倍

但是,当内存到索引大小比例开始变小(即索引大小变得比可用内存大得多)时,我会特别感兴趣知道是否存在性能影响?我在#postgresql IRC频道上被告知GIN需要将所有索引保留在内存中,否则它将无效,因为与B-Tree不同,它不知道从磁盘读入哪个部分一个特定的查询?问题是:这是真的(因为我也被告知与此相反)?GiST是否有相同的限制?在使用这些索引算法之一时,我应该注意其他限制吗?

postgresql indexing gwt-gin gist-index

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

二进制搜索在实践中使用在哪里?

每个程序员都被教导二进制搜索是一种搜索有序数据列表的好方法.有许多玩具教科书使用二进制搜索的例子,但在实际编程中呢:在现实生活中程序中实际使用的二元搜索在哪里?

algorithm binary-search

29
推荐指数
6
解决办法
3万
查看次数

不允许Java方法覆盖的超类型的原因是什么?

编译器认为以下代码无效:

class Foo {
    void foo(String foo) { ... }
}

class Bar extends Foo {
    @Override
    void foo(Object foo) { ... }
}
Run Code Online (Sandbox Code Playgroud)

我认为这在JLS 8.4.8.1中有描述:"m1的签名是m2签名的子签名(§8.4.2)." 在8.4.2中:"相应类型变量的边界是相同的".

我的问题是:为什么子类型(Bar)中的参数不能成为超类型(Foo)中参数的超类型.在示例中,Object是String的超类型.据我所知,这不会违反Liskov替代原则.

是否有允许这会破坏代码的情况或者它是当前JLS的限制?

java overloading

20
推荐指数
3
解决办法
1908
查看次数

YouTube IFrame API使用HTTPS + HTML5生成混合内容警告

当我使用HTML5模式下的iframe api在youtube上嵌入youtube时,它仍会使用HTTP拉取实际流,这会生成混合内容警告.是否正确支持此用例?

我从2011年发现了这个讨论,这表明事实并非如此.但是我只是尝试使用HTTPS访问CDN服务器并且它有效 - 但是它返回了错误的证书(google.com而不是youtube.com的东西).

有没有人设法使用HTML5中的IFRAME API在HTTPS页面上嵌入视频而不会触发混合内容警告(即Chrome中带有黄色警告标志的锁定)?

谢谢

ssl https youtube-api youtube-iframe-api

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

如何估计JVM是否有足够的可用内存用于特定数据结构?

我有以下情况:有几台机器组成一个集群.客户端可以加载数据集,我们需要选择将加载数据集的节点,如果没有一台机器可以适合数据集,则拒绝加载/避免OOM错误.

我们当前所做的事情:我们现在entry count在数据集中估算memory to be usedas entry count * empirical factor(手动确定).然后检查它是否低于空闲内存(得到Runtime.freeMemory()),如果是,则加载它(否则重做其他节点上的进程/报告没有空闲容量).

这种方法的问题是:

  • empirical factor需要被重新和手动更新
  • freeMemory有时可能会因为一些未清理的垃圾而少报(这可以通过System.gc在每次这样的通话之前运行来避免,但这会减慢服务器的速度并且还可能导致过早的促销)
  • 另一种方法是"只是尝试加载数据集"(如果抛出OOM则返回)但是一旦抛出OOM,你可能会破坏在同一个JVM中运行的其他线程,并且没有优雅的方法从中恢复.

这个问题有更好的解决方案吗?

java memory-management out-of-memory

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

在 Google App Engine 上使用任务队列时如何确定任务的优先级?

我正在尝试解决以下问题:

  1. 我有一系列想要执行的“任务”
  2. 我有固定数量的工作人员来执行这些工作人员(因为它们使用 urlfetch 调用外部 API,并且对此 API 的并行调用数量有限)
  3. 我希望这些“任务”能够“尽快”执行(即最小延迟)
  4. 这些任务是较大任务的一部分,可以根据原始任务的大小进行分类(即,小型原始任务可能生成 1 到 100 个任务,中型任务可能生成 100 到 1000 个任务,大型​​任务可能生成超过 1000 个任务)。

棘手的部分:我想高效地完成所有这些(即最小延迟并使用尽可能多的并行 API 调用 - 不超过限制),但同时尝试防止从“生成大量任务” “大”原始任务延迟“小”原始任务生成的任务。

换句话说:我希望为每个任务分配一个“优先级”,其中“小”任务具有更高的优先级,从而防止“大”任务导致饥饿。

一些搜索似乎并没有表明任何预制的东西可用,所以我想出了以下内容:

  • 创建三个推送队列:tasks-small, tasks-medium,tasks-large
  • 为每个请求设置最大并发请求数,使总数达到并发 API 调用的最大数量(例如,如果最大并发 API 调用数为 200,我可以将其设置tasks-smallmax_concurrent_requests30、60tasks-mediumtasks-large100)
  • 排队任务时,检查编号。每个队列中待处理的任务(使用类似 QueueStatistics 类的东西),并且,如果其他队列未 100% 使用,则将任务排入其中,否则只需将任务排入具有相应大小的队列中。

例如,如果我们有T1一个小任务的一部分的任务,首先检查是否tasks-small有空闲的“槽”并将其排入队列。否则检查tasks-mediumtasks-large。如果它们都没有空闲插槽,则tasks-small无论如何将其排队,并且它将在处理之前添加的任务之后进行处理(注意:这不是最佳选择,因为如果“插槽”在其他队列上释放,它们仍然不会处理队列中待处理的任务tasks-small

另一种选择是使用 PULL 队列,并让一个中央“协调器”根据优先级从该队列中拉取并分派它们,但这似乎会增加一点延迟。

然而,这似乎有点老套,我想知道是否有更好的选择。


编辑:经过一些想法和反馈后,我正在考虑通过以下方式使用 PULL 队列:

  • 有两个 PULL 队列 (medium-taskslarge-tasks …

google-app-engine task-queue

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

使用Django时查找查询源的推荐方法?

我在查找我在数据库日志中看到的查询源时遇到了困难.我正在使用Django,因此实际的查询会自动生成,这使得简单的"grep"无效.

我正在考虑修补数据库游标以将当前堆栈跟踪追加到查询中,例如:

for conn in connections.all():
    with conn.cursor() as c:
        ctype = type(c.cursor)
        orig_execute = ctype.execute
        def _patchedExecute(self, query, params=None):
            query = query + ' -- ' + traceback.format_stack()
            return orig_execute(self, query, params)
        ctype.execute = _patchedExecute
        orig_execute_many = ctype.executemany
        def _patchedExecuteMany(self, query, params=None):
            query = query + ' -- ' + traceback.format_stack()
            return orig_execute_many(self, query, params)
        ctype.executemany = _patchedExecuteMany
Run Code Online (Sandbox Code Playgroud)

我想知道的是:

  • 有没有现成的解决方案?(似乎有点常见的问题)
  • 如果没有,是否有比上述解决方案更好的解决方案?(我不熟悉Django内部)

编辑:感谢所有建议使用Django Debug Toolbar的人.我已经意识到这一点(以及像Django Silk这样的类似工具)并且已经在使用它,但是在这种特殊情况下我对反向问题更感兴趣.那就是:从我看到经常执行特定类型的查询的数据库开始,或者需要很长时间,我想知道我的Django应用程序在哪里生成这些查询?

python sql django

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

带有带外数据的Java套接字

有人知道如何使用Java套接字接收(如何知道您收到的)带外数据?特别是我已经阅读了sendUrgentDatasetOOBInline的文档,其中说明:

请注意,仅提供有限的支持来处理传入的紧急数据.特别是,没有提供传入紧急数据的通知,除非由更高级别的协议提供,否则无法区分正常数据和紧急数据.

但我仍然希望有人有解决方案:-)

更多细节:

我正在通过套接字发送序列化对象,我并没有真正看到我如何找到插入流中的"随机"OOB字节(除了Java在我尝试反序列化时会给我一个例外的事实宾语).

java sockets out-of-band

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

Perl套接字如何在Linux下解析主机名?

我有一个(据我所知)完美的Linux设置(Ubuntu 8.04),其中所有工具(nslookup,curl,wget,firefox等)都能够解析地址.但是,以下代码失败:

$s = new IO::Socket::INET(
    PeerAddr => 'stackoverflow.com',
    PeerPort => 80,
    Proto => 'tcp',
);

die "Error: $!\n" unless $s;
Run Code Online (Sandbox Code Playgroud)

我验证了以下内容:

  • Perl能够使用gethostbyname解析地址(即下面的代码可以工作):

    my $ret = gethostbyname('stackoverflow.com'); print inet_ntoa($ret);

  • 原始源代码在Windows下运行

  • 这是它应该如何工作(即它应该解析主机名),因为LWP试图使用这种行为(实际上我通过尝试调试为什么LWP不能为我工作而偶然发现问题)
  • 运行脚本不会发出DNS请求(因此它甚至不会尝试解析名称).用Wireshark验证

sockets linux dns perl

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

机器人发布的 Slack 帖子并不总是包含

我正在使用Slack的“传入 webhooks ”功能向频道发布通知。我还使用“icon_emoji”功能来装饰消息并突出显示不同类型的消息。但是我发现图像并没有一致显示:

在此处输入图片说明

IE。只有当它说BOT图像也会显示出来。

任何想法是什么问题?理想情况下,我希望图像显示每条消息,以便可以轻松扫描它们(有些消息提供更多信息,而其他消息需要及时处理)。

slack-api

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

为什么Sybase JDBC驱动程序"吃掉"异常?

我正在使用官方的Sybase JDBC驱动程序连接到数据库并通过创建CallableStatement调用存储过程,将参数绑定到它并在其上调用.execute().

但是,我发现即使存储过程失败,也不会抛出任何异常.我可以通过使用Wireshark嗅探到数据库的流量并观察返回的错误消息来验证故障是否传播回给我.

最后我发现使用.executeUpdate()而不是.execute()确实给了我例外,但是我还有两个问题:

  1. 为什么.execute()和.executeUpdate()表现不同?从接口的SUN文档看来,它们应该(几乎)做同样的事情......
  2. 在调用存储过程时,用.executeUpdate()替换.execute()是否总是合适的?存储过程是否必须符合某些特定要求才能使用.executeUpdate()进行调用?(例如,它必须有更新/删除/插入语句作为最后一步吗?)

更新:我已经尝试过jTDS,它的行为正确(如:在两种情况下都抛出SQLException - 使用.execute()和.executeUpdate()).但是,由于我无法控制的限制,切换驱动程序实际上是不可能的.

另外:我对此存储过程返回的结果不感兴趣,它是一个插入/更新类型过程.我只会被插入以查看(并且能够捕获/记录)它是否失败.我尝试过的另一件事是在.execute()之后从连接中获取警告,但它也没有包含任何内容.

java sybase jdbc sqlexception

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

为什么第一次更换没有任何影响?

很可能我在这里遗漏了一些明显的东西,但为什么我需要两次调用搜索/替换正则表达式才能在下面的代码中产生任何影响?如果我只打电话一次,更换不会发生:-(

use strict;
use warnings;
use LWP::Simple;

my $youtubeCN = get(shift @ARGV);
die("Script tag not found!\n")
 unless $youtubeCN =~ /<script src="(.*?)">/;
my $youtubeScr = $1;
# WHY ???
$youtubeScr =~ s/&amp;/&/g;
$youtubeScr =~ s/&amp;/&/g;
my $gmodScr = get($youtubeScr);

$gmodScr =~ s/http:\/\/\?container/http:\/\/www.gmodules.com\/ig\/ifr\?/;
print "<script type=\"text/javascript\">$gmodScr</script>\n"; 
Run Code Online (Sandbox Code Playgroud)

更新:我将此脚本称为:

perl bork_youtube_channel.pl 'http://www.youtube.com/user/pennsays'
Run Code Online (Sandbox Code Playgroud)

如果放大器未正确转换为&,我将在步骤2返回HTML页面(可能是错误页面)而不是Javascript.

更新:事实证明,URL毕竟是双重编码的.感谢大家的帮助!

regex perl

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