我有大约300个文本文件,其中包含跟踪器,种子和同伴的数据.每个文件的组织方式如下:
tracker.txt
time torrent
time peer
time peer
...
time torrent
...
Run Code Online (Sandbox Code Playgroud)
我有每个跟踪器的几个文件,并且重复了大部分信息(相同的信息,不同的时间).
我希望能够分析我所拥有的内容,并报告有关事情的统计数据
数据的庞大数量使我难以接受.这是我尝试过的.
MySQL的
我把所有东西都放进了数据库; 每个实体类型一个表和用于保存关系的表(例如,此torrent位于此跟踪器上).
将信息添加到数据库的速度很慢(当我尝试这个时,我没有13GB的信息),但之后分析这些关系是不行的.每个稍微复杂的查询都需要24小时才能完成(如果有的话).
一个示例查询将是:
SELECT COUNT(DISTINCT torrent)
FROM TorrentAtPeer, Peer
WHERE TorrentAtPeer.peer = Peer.id
GROUP BY Peer.ip;
Run Code Online (Sandbox Code Playgroud)
我尝试在我的my.cnf文件中增加内存分配,但似乎没有帮助.我使用了my-innodb-heavy-4G.cnf设置文件.
编辑:添加表格详细信息
这是我正在使用的:
Peer Torrent Tracker
----------- ----------------------- ------------------
id (bigint) id (bigint) id (bigint)
ip* (int) infohash* (varchar(40)) url (varchar(255))
port (int)
TorrentAtPeer TorrentAtTracker
----------------- ----------------
id (bigint) id (bigint)
torrent* (bigint) torrent* (bigint)
peer* (bigint) tracker* (bigint) …Run Code Online (Sandbox Code Playgroud) 我有一个对象集合,每个对象都有一个名为fingerprint的字段,其中包含20个哈希:
{
title: 'The Chronicles of Narnia',
authors: ['C.S. Lewis'],
fingerprint: ['50e...', 'ae2...', ...]
}
Run Code Online (Sandbox Code Playgroud)
然后我有另外20个哈希的查询指纹.我想做的是找到至少共享X哈希值的所有条目.换句话说,两个阵列的交叉点必须是一定的大小.
我有一个使用MySQL的类似系统的旧实现.查询看起来像这样:
SELECT *
FROM Document d
INNER JOIN Fingerprint f
ON d.id = f.document_id
WHERE f.whorl IN (:hashes)
GROUP BY d.id
HAVING COUNT(d.id) >= X
Run Code Online (Sandbox Code Playgroud)
表中的每个条目都Fingerprint包含文档ID和指纹中的单个轮廓.Fingerprint每个文档将有20个条目.
据我所知,这个查询正在做的是每次旋转匹配然后按唯一文档分组时复制文档.这似乎有点浪费,但它确实有效.
我正试图在MongoDB中重新实现这个系统,但我运气不好.我可以获得至少共享一个或所有轮生的所有条目的列表:
at least one: db.objects.find({ fingerprint: {$in: [hashes]})
all: db.objects.find({ fingerprint: {$all: [hashes]})
Run Code Online (Sandbox Code Playgroud)
我知道我可以在应用程序层中扫描此列表以查找我之后的匹配项.如果我预计有数百万件物品(目前约为150万件),那么这似乎是一个坏主意.
我已经查看了aggregate()功能但无法改进我已有的功能:
db.objects.aggregate({$match: {fingerprint: {$in: [hashes]}}})
Run Code Online (Sandbox Code Playgroud)
从这里我想我可以分组和过滤:
db.objects.aggregate({$match: {fingerprint: {$in: [hashes]}}},
{$group: {_id: "$_id", matches: {$sum: 1}}})
Run Code Online (Sandbox Code Playgroud)
在这里,我试图复制MySQL查询的作用:为每个匹配发出一个文档然后计算文档.当然,无论有多少匹配,我们只会发出一次文档. …
我觉得这应该很容易,但我无法得到任何工作.
我在Facebook上为我的网站创建了一个应用程序.我已经设置了我的网站网址并公开了我的应用.
根据说明,我应该在我的顶部附近添加此代码 body
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'MY_APP_ID',
xfbml : true,
version : 'v2.2'
});
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
Run Code Online (Sandbox Code Playgroud)
然后我可以嵌入这样的插件:
<div
class="fb-like"
data-share="true"
data-width="450"
data-show-faces="true">
</div>
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我没有看到任何内容fb-like div.
我挖得更深一些,似乎sdk.js应该由第一位代码引入的文件不是.相反,//connect.facebook.net/en_US/sdk.jsURL返回307 Internal Redirect到about:blank.
我已经清除了我的缓存,我已经尝试了这个代码localhost以及我的实际域名,我更改了站点URL以匹配.
我究竟做错了什么?