创建冗余 subversion 存储库的最佳方法是什么?
我有一个 subversion 存储库(通过 apache2 和 WebDAV 链接),并希望在发生中断时在不同的服务器上创建一个镜像存储库,但我不确定继续的最佳方式。
我认为提交后脚本可用于传播更改,但我不确定这是否是最佳方法,任何人都有任何意见
我想学习如何在 .net 中创建真正强大的应用程序 - 具有容错能力并且能够承受意外情况的应用程序。我在哪里可以找到有关此主题的文献/指南?到目前为止,我的运气并不好。
我们正在开发一个系统,一个人可以将文档发送给另一个人,一个文档可以有多个附件,如下所示。
Document {
Set<Attachment> attachments;
}
Run Code Online (Sandbox Code Playgroud)
如果 X 向 Y 发送文档 (Doc1,Ver1) 并且 Y 编辑该文档,那么我们必须创建该文档的新版本 (Doc1,Ver2),以便 X 发送框不会反映 Y 所做的更改。
在我们的系统中,将有数百万个文档,其中每个文档可以有数百个附件。此外,一个文件可以在一段时间内通过 n 个人。
我们应该能够获取任何文档版本以及它当时的附件列表,所以我必须维护文档的版本,所以我立即想到的表结构是下面的。
Document - id primary key, ver_id primary key
Attachment - id, doc_id foreign key, doc_ver_id foreign key
Run Code Online (Sandbox Code Playgroud)
但是这种结构的问题是,如果 X 向 Y 发送一个带有 100 个附件的文档,而 Y 做了一些小的修改,那么我必须创建一个新版本并复制新版本的所有附件,其中大部分是相同的与之前的版本一样,由于我们将拥有数百万个文档,并且每个文档将通过 n 人,因此该模型将导致非常庞大的附件表,其中包含大量冗余数据。
所以我们想到了另一种附件结构,如下所示。
Document - id primary key, ver_id primary key
Attachment - id, doc_id, attached_ver_id, detached_version_id
Run Code Online (Sandbox Code Playgroud)
但是我无法使用这种结构为 Document 创建休眠实体,所以我的问题是,是否有任何其他表结构可以更好地以较少的冗余解决此问题,并且是否可以为上表创建休眠映射结构体。
redundancy database-design hibernate version hibernate-mapping
这是一个计算机科学/信息理论问题,而不是一个简单的编程问题,所以如果有人知道一个更好的网站发布这个,请告诉我.
假设我有一个N位数据,将在M个消息中冗余发送,其中至少M-1个消息将被成功接收.我对以每个消息更少的比特编码N比特数据的不同方式感兴趣.(这类似于RAID但是在更小的级别,其中N = 8或16或32)
示例:假设N = 16且M = 4.那么我可以使用以下算法:
1st and 3rd message: send "0" + bits 0-7
2nd and 4th message: send "1" + bits 8-15
Run Code Online (Sandbox Code Playgroud)
如果我能保证4个消息中的3个消息将通过,则每个组中至少有一条消息将通过.因此,我可以用9位或更少的位来完成这项工作,可能有一种方法可以用更少的总位来做到这一点,但我不知道如何.
是否有一些简单的编码/解码算法来做这种事情?这个问题有名字吗?(如果我知道它叫什么,我可以谷歌吧!)
注意:在我的特定情况下,消息要么正确到达,要么根本没有到达(没有消息到达有错误).
(编辑:将第二部分移到另一个问题)
我已经~/alt在Ubuntu 12.04上使用GCC-4.6成功构建并安装(在前缀下)LLVM-Clang主干(2012年4月23日),并使用此Clang-build成功使用libc ++.当我想使用它时,我必须提供两种-lc++,-libstdc++如下所示
/home/per/alt/bin/clang -x c++ -I/home/per/alt/include/v1 -L/home/per/alt/lib -std=gnu++0x -g -Wall ~/f.cpp -lm -lc++ -lstdc++ -lpthread -o f
Run Code Online (Sandbox Code Playgroud)
编译f.cpp包含
#include <iostream>
using std::cout;
using std::endl;
int main(int argc, const char * argv[]) {
cout << "sxx" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我省略,-lstdc++我会收到链接错误
/home/per/alt/include/v1/ostream:989: error: undefined reference to '__cxa_begin_catch'
/home/per/alt/include/v1/ostream:993: error: undefined reference to '__cxa_end_catch'
/home/per/alt/include/v1/ostream:993: error: undefined reference to '__cxa_end_catch'
/tmp/f-4l9mgl.o(.eh_frame+0xd3): error: undefined reference to '__gxx_personality_v0'
clang: error: linker command …Run Code Online (Sandbox Code Playgroud) 我很好奇大众通过-q参数创建交互术语的方式.
为了说明的目的,我使用这个玩具数据,称为cats.vm:
1 |a black |b small green |c numvar1:1.62 numvar2:342 |d cat |e numvar3:554
1 |a white |b large yellow |c numvar1:1.212 numvar2:562 |d cat |e numvar3:632
-1 |a black |b small green |c numvar1:12.03 numvar2:321 |d hamster |e numvar3:754
1 |a white |b large green |c numvar1:5.8 numvar2:782 |d dog |e numvar3:234
-1 |a black |b small yellow |c numvar1:2.322 numvar2:488 |d dog |e numvar3:265
1 |a black |b large yellow |c numvar1:3.99 numvar2:882 |d hamster |e numvar3:543 …Run Code Online (Sandbox Code Playgroud) 我有一个list的character vectorS:
my.list <- list(e1 = c("a","b","c","k"),e2 = c("b","d","e"),e3 = c("t","d","g","a","f"))
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个function对于任何character横跨出现不止一次list的vectorS(在每vector一个character只能出现一次),将只保留第一次亮相.
因此,此示例的结果列表将是:
res.list <- list(e1 = c("a","b","c","k"),e2 = c("d","e"),e3 = c("t","g","f"))
Run Code Online (Sandbox Code Playgroud)
注意,可以消除整个vector中的list整数,使得结果list中的元素数量不一定必须等于输入list.
我正在测试此存储库中的 Reed Solomon 算法,以便在外部发生变化时恢复信息。
假设:
m = bits per symbol
k = data
r = redundance
n = bits per block = r + k = 2^m - 1
t = error correction = (n - k) / 2
Run Code Online (Sandbox Code Playgroud)
我可以使用以下参数编码和恢复信息:
m = 8
n = 255
r = 135
k = 120
t = 67
Run Code Online (Sandbox Code Playgroud)
并且完美运行,我可以恢复 67 个错误。
我的假设是:
我正在开发一个大型 CMS 系统,其中特定模块及其子模块利用相同的后端 API。除了“文档类型”之外,每个子模块的端点完全相同。
所以遵循这样的模式:
api/path/v1/{文档类型}
api/path/v1/{document-type}/{id}
api/path/v1/{document-type}/{id}/versions
随着时间的推移,使用这个 API 的模块数量不断增加,我留下了许多实现 7 CRUD 方法的冗余 api 服务:
getAllXs() {...}
getX(id) {...}
getXVersion(id, versionId) {...}
etc...
Run Code Online (Sandbox Code Playgroud)
使用看起来像这样的单个方法
getAllXs() {
let endpoint = BASE.URL + ENDPOINTS.X;
let config = ...
return http.get(endpoint, config)
.then(response => response.data);
.catch(...);
}
Run Code Online (Sandbox Code Playgroud)
其中 X 将是特定文档类型的名称。
我决定做一个单一的服务并做这样的事情:
const BASE_URL = window.config.baseUrl + Const.API_ENDPOINT;
const ENDPOINTS = {
"W": "/v1/W/",
"X": "/v1/X/",
"Y": "/v1/Y/",
"Z": "/v1/Z/",
}
getAllDocuments(docType, config={}) {
let endpoint = BASE_URL + ENDPOINTS[docType];
return http.get(endpoint, config) …Run Code Online (Sandbox Code Playgroud) 我在这里检查了.Net的Random类的源代码.令我惊讶的是最后一行
public Random(int Seed) {
int ii;
int mj, mk;
//Initialize our Seed array.
//This algorithm comes from Numerical Recipes in C (2nd Ed.)
int subtraction = (Seed == Int32.MinValue) ? Int32.MaxValue : Math.Abs(Seed);
mj = MSEED - subtraction;
SeedArray[55]=mj;
mk=1;
for (int i=1; i<55; i++) { //Apparently the range [1..55] is special (Knuth) and so we're wasting the 0'th position.
ii = (21*i)%55;
SeedArray[ii]=mk;
mk = mj - mk;
if (mk<0) mk+=MBIG;
mj=SeedArray[ii];
}
for (int k=1; …Run Code Online (Sandbox Code Playgroud) redundancy ×10
c# ×2
c++ ×2
api ×1
architecture ×1
clang ×1
encoding ×1
gcc ×1
hibernate ×1
javascript ×1
list ×1
quadratic ×1
r ×1
random ×1
reed-solomon ×1
reliability ×1
repository ×1
svn ×1
version ×1
vowpalwabbit ×1