我们有一个基于文件的程序,我们想要转换为使用文档数据库,特别是MongoDB.问题是,MongoDB在32位机器上限制为2GB(根据http://www.mongodb.org/display/DOCS/FAQ#FAQ-Whatarethe32bitlimitations%3F),我们的很多用户将拥有超过2GB的数据.有没有办法让MongoDB以某种方式使用多个文件?
我想也许我可以在一台机器上实现分片,这意味着我会在同一台机器上运行多个mongod并且它们会以某种方式进行通信.这可行吗?
git
由于二进制测试文件和java .jar
文件的历史包含,我们有许多存储库已经增长到难以管理的大小.
我们正准备完成git filter-branch
这些存储库的操作,在它们被使用的任何地方重新克隆它们(从每个数十个到数百个部署,取决于回购)并且考虑到重写历史的问题我想知道是否可能存在任何其他解决方案
理想情况下,我想在不重写每个存储库的历史记录的情况下将问题文件外部化.从理论上讲,这应该是可能的,因为你检查相同的文件,具有相同的大小和相同的哈希值,只是从不同的地方(远程而不是本地对象存储)获取它们.到目前为止,我找到的任何潜在解决方案似乎都不允许我这样做.
从git-annex开始,我能找到解决问题的最接近的方法是如何追溯性地附加一个已经存在于git仓库中的文件,但就像删除大文件一样,这需要重新编写历史记录以进行转换原来git add
变成了git annex add
.
从那里开始,我开始查看git-annex不是列出的其他项目,所以我检查了git-bigfiles,git-media和git-fat.不幸的是我们不能使用git-bigfiles fork,git
因为我们是Eclipse 商店并使用git
和EGit的混合.它看起来不像git-media或git-fat也可以做我想要的,因为虽然你可以用外部等价物替换现有的大文件,但你仍然需要重写历史记录以删除已经存在的大文件一直致力于.
那么,是否可以在不重写历史记录的情况下缩小.git存储库,或者我们是否应该回到使用计划git filter-branch
和整个重新部署的负载?
顺便说一句,相信这应该是可能的,但可能与git
当前浅层克隆实现的限制相同.
Git已经为同一个blob支持多个可能的位置,因为任何给定的blob都可以在松散的对象存储(.git/objects
)或包文件(.git/objects)中,所以理论上你只需要git-annex
在这个级别上挂钩的东西而不是更高(例如,如果你愿意,有一个按需下载远程blob的概念).不幸的是,我找不到任何人已经实施甚至建议这样的事情.
我有一个包含数千行数千个字符的大文件.
我将光标移动到第3000个字符.
如果我使用PageDown或Ctrl+ D,文件将滚动,但光标将返回到第一个无空格字符.
有一个选项可以设置为在这样的滚动后将光标保持在同一列中吗?
我在Window上使用gvim ,在OpenVMS和Cygwin上使用vim .
我目前正在开发一款JavaScript(pure js)
基于游戏的游戏.游戏包含5个大型精灵表(例如2861×768和4096×4864).游戏开始时,所有5个精灵表都预先加载到画布元素.这5个精灵中的三个一起表示一个动画,其中每个精灵包含75个帧.当一个精灵以其动画结束时,我隐藏它并显示下一个精灵.当第二个精灵完成动画时,我隐藏它并显示第三个/最后一个.
当即将显示第二个或第三个精灵时,会发生0.5秒-1秒的小延迟.图像正在被解码.
这不是第一次发生的事情,它总是发生的事情.并且该动画每5分钟重复一次,并且总是发生小延迟.
我之所以使用canvas元素进行预加载,是因为我认为WebKit会丢弃解码图像一段时间未使用,而canvas元素会阻止WebKit将其从内存中删除.但这不起作用.
我已经尝试了几乎所有我所知道的优化.我甚至通过删除后代选择器等重构了我的所有CSS.
我用来绘制这些动画的渲染器是由我自己构建的,它工作得很完美,所以这不是问题,因为它在Firefox中工作得非常好.
编辑[2016/03/04]: 我用帆布制作了一个模式,结果更糟.它落后很多.而延迟仍然是一样的.仅在NW中,Chrome中的问题并不存在.
Codepen:我的渲染器http://codepen.io/anon/pen/JXPWXX
注意:如果我隐藏那些其他元素opacity:0.2
而不是opacity:0
,则问题不会发生.但是,我无法隐藏它们,因为它们仍然可见.它们不应该是可见的.如果我添加opacity:0.01
它是不可见的,并且问题不会发生在Chrome中,但仍然存在于NW中.
在NW中,当我从不透明度开始:0.2到不透明度:1时,正在处理图像解码.在Chrome浏览器中也不会发生同样的事情.
我使用以下版本:
nw.js v0.12.3
io.js v1.2.0
Chromium 41.0.2272.76
commit hash: 591068b-b48a69e-27b6800-459755a-2bdc251-1764a45
Run Code Online (Sandbox Code Playgroud)
三个图像精灵分别为14.4MB,14.9MB和15.5MB.每个精灵包含75帧.
为什么会发生这种情况,我该如何预防呢?
作为本地subversion czar,我向每个人解释只保留存储库中的源代码和非大文本文件,而不是巨大的二进制数据文件.可能是较小的二进制文件,它们是测试的一部分.
不幸的是我与人类合作!有人可能有一天偶然会犯下一个800MB的二进制垃圾箱.这会降低存储库操作的速度.
上次我检查过,您无法从存储库中删除文件; 只是让它不是最新版本的一部分.如果有人想要回忆该日期或修订号的存储库状态,存储库会永久保留怪物.
有没有办法真正删除该怪物文件,最终得到一个像样的大小的存储库?我已经尝试过svnadmin dump/load的东西,但这很痛苦.
我需要在C#中对相当大的XML文件(这里可能超过一千兆字节)进行一些处理,包括执行一些复杂的xpath查询.我遇到的问题是我通常通过System.XML库执行此操作的标准方法是在将任何内容添加到内存之前将整个文件加载到内存中,这会导致此大小的文件出现内存问题.
我只需要阅读它们并查询其中包含的数据就不需要更新文件.一些XPath查询非常复杂,并且涉及多个级别的父子类型关系 - 我不确定这是否会影响使用流式读取器的能力,而不是将数据作为块加载到内存中.
我可以看到使其工作的一种方法是使用基于流的方法执行简单分析,并且可能将XPath语句包装到XSLT转换中,之后我可以在文件中运行,尽管看起来有点复杂.
或者我知道XPath查询中有一些元素不能运行,所以我想我可以根据它的原始树结构将文档分解为一系列较小的片段,这可能足够小,可以在内存中处理造成太大的破坏.
我试图在这里解释我的目标,所以如果我在一般方法上咆哮完全错误的树我相信大家可以让我正确...
我正在使用Jersey客户端进行基于http的请求.如果文件很小但是当我发布大小为700M的文件时遇到错误,它会很好用:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:61)
at com.sun.jersey.api.client.CommittingOutputStream.write(CommittingOutputStream.java:90)
at com.sun.jersey.core.util.ReaderWriter.writeTo(ReaderWriter.java:115)
at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeTo(AbstractMessageReaderWriterProvider.java:76)
at com.sun.jersey.core.impl.provider.entity.FileProvider.writeTo(FileProvider.java:103)
at com.sun.jersey.core.impl.provider.entity.FileProvider.writeTo(FileProvider.java:64)
at com.sun.jersey.multipart.impl.MultiPartWriter.writeTo(MultiPartWriter.java:224)
at com.sun.jersey.multipart.impl.MultiPartWriter.writeTo(MultiPartWriter.java:71)
at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:300)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:204)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:147)
at com.sun.jersey.api.client.Client.handle(Client.java:648)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:680)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:568)
at TestHttpRequest.main(TestHttpRequest.java:42)
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
ClientConfig cc = new DefaultClientConfig();
Client client = Client.create(cc);
WebResource resource = client.resource("http://localhost:8080/JerseyWithServletTest/helloworld");
FormDataMultiPart form = new FormDataMultiPart();
File file = new File("E:/CN_WXPPSP3_v312.ISO");
form.field("username", "ljy");
form.field("password", "password");
form.field("filename", file.getName());
form.bodyPart(new FileDataBodyPart("file", file, MediaType.MULTIPART_FORM_DATA_TYPE));
ClientResponse …
Run Code Online (Sandbox Code Playgroud) 我们目前正在使用ZedGraph绘制一些数据的折线图.输入数据来自任意大小的文件,因此,我们事先不知道数据点的最大数量是多少.但是,通过打开文件并读取标题,我们可以找出文件中有多少数据点.
文件格式基本上是[时间(双精度),值(双精度)].但是,条目在时间轴上不一致.在t = 0秒和t = 10秒之间可能没有任何点,但在t = 10秒和t = 11秒之间可能存在100K,依此类推.
例如,我们的测试数据集文件大约为2.6 GB,它有324M点.我们想向用户展示整个图表,让她浏览图表.然而,向ZedGraph加载324M点不仅是不可能的(我们使用的是32位机器),但也没用,因为屏幕上没有这么多点.
使用ZedGraph的FilteredPointList功能似乎也是不可能的,因为这需要先加载整个数据,然后对该数据执行过滤.
因此,除非我们遗漏任何东西,否则我们唯一的解决办法似乎是 - 以某种方式对数据进行抽取,但是当我们不断努力时,我们遇到了很多问题:
1-我们如何抽取未及时到达的数据?
2-由于无法将整个数据加载到内存中,因此任何算法都需要在磁盘上运行,因此需要仔细设计.
3-我们如何处理放大和缩小,尤其是当数据在x轴上不均匀时.
如果数据是统一的,在初始加载图形时,我们可以Seek()
通过文件中预定义的条目数量,并选择每N个其他样本并将其提供给ZedGraph.但是,由于数据不统一,我们必须更加智能地选择要显示的样本,并且我们无法提出任何不必读取整个文件的智能算法.
我道歉,因为这个问题没有特别尖锐的特异性,但我希望我能解释一下我们问题的性质和范围.
我们在Windows 32位,.NET 4.0上.
我们正在尝试使用ASP.Net WebApi返回大型图像文件,并使用以下代码将字节流式传输到客户端.
public class RetrieveAssetController : ApiController
{
// GET api/retrieveasset/5
public HttpResponseMessage GetAsset(int id)
{
HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
string filePath = "SomeImageFile.jpg";
MemoryStream memoryStream = new MemoryStream();
FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read);
byte[] bytes = new byte[file.Length];
file.Read(bytes, 0, (int)file.Length);
memoryStream.Write(bytes, 0, (int)file.Length);
file.Close();
httpResponseMessage.Content = new ByteArrayContent(memoryStream.ToArray());
httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
httpResponseMessage.StatusCode = HttpStatusCode.OK;
return httpResponseMessage;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常但我们处理的一些文件可能是2 GB及以上的大小导致连接超时.我们过去使用类似于下面的代码(使用HttpHandlers)来对响应流进行响应,以保持连接成功.
byte[] b = new byte[this.BufferChunkSize];
int byteCountRead = 0;
while ((byteCountRead = stream.Read(b, 0, …
Run Code Online (Sandbox Code Playgroud) 我需要将每个第二行的内容移动到上面的行,这样line2的数据就在line1的旁边,逗号或空格分隔的工作.
输入:
line1
line2
line3
line4
Run Code Online (Sandbox Code Playgroud)
输出:
line1 line2
line3 line4
Run Code Online (Sandbox Code Playgroud)
我一直用vim进行简单的录音,但是当我告诉它做了10万次时,vim似乎崩溃了...我想也许sed会是一个很好的选择,但不知道怎么做我想要的或者有更好的选择?
每行只包含1个数值,我只有一百万行......
large-files ×10
c# ×3
.net ×2
vim ×2
charts ×1
download ×1
egit ×1
file-upload ×1
git ×1
html5-canvas ×1
javascript ×1
jersey ×1
jgit ×1
mongodb ×1
node-webkit ×1
performance ×1
sed ×1
streaming ×1
svn ×1
xml ×1
xpath ×1
zedgraph ×1