标签: distributed

同步噩梦 - 是否可以在没有IIS的2个SQL CE实例之间使用合并复制(或RDA)?

我们面临以下问题,涉及保持以下同步:

  • 1集中服务器(IIS/MSSQL 2005)
  • ClickOnce分发的许多桌面WPF客户端
  • 许多移动客户端 - (Windows CE)

alt text http://img502.imageshack.us/img502/8246/deployment.png

有了这些棘手的限制:

  • 所有同步关系都是双向的
  • 桌面和移动节点需要离线模式
  • 移动节点不能与中央服务器同步,而是通过USB与桌面节点同步.桌面节点充当移动客户端的服务器,而不是中央服务器.然后,移动节点的更新需要通过与桌面同步传播到中央服务器,然后将该桌面与中央服务器同步. p.

讨厌.

为了同步桌面和服务器,我们知道我们可以使用合并复制 - 服务器是提供商,桌面作为订户,一切都很好.但是同步移动和桌面节点呢?看似桌面不能是没有SQL Server + ISS的发布者,对吧?我们只能将MSSQL CE部署到桌面.

即使是这种情况,节点既可以是订户又可以是发布者?我怀疑Merge Replication架构不支持这种安排 - 看起来hub和spoke是唯一受支持的模型.

我们正在尝试确定是否可以取消RDA或合并复制作为可能的解决方案 - 如果是这样,我们可能会继续使用MS Sync Framework.

也许我们可以考虑其他技术?

谢谢大家,

阿什利

更新:我们刚刚开始玩MS Sync Framework,它摇滚!

distributed merge-replication rda microsoft-sync-framework

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

从shell命令通知本地erlang节点的最简单方法

我正在运行一个分布式的erlang系统,每台机器有一个节点.

由于DNS不可用,我都用相同的-sname参数启动它们,例如

erl -sname foo ...
Run Code Online (Sandbox Code Playgroud)

操作系统守护程序具有在/bin/sh发生特定事件时(当USB棒被拖入系统时)执行shell()命令的功能.

我正在寻找一种简单的方法来使用这个shell命令在本机的本地erlang节点上调用一个函数(在检测到并安装了USB记忆棒后采取进一步的操作).

我正在考虑erl -sname bar从shell 调用并运行一些看起来像的代码

[_,Host] = string:tokens(atom_to_list(node()), "@"),
The_node = list_to_atom("foo@" ++ Host),
spawn(The_node, My_fun),
Run Code Online (Sandbox Code Playgroud)

这是要走的路吗?或者是开始一个全新的erlang节点过度杀戮(虽然不会经常这样做)

或者更好地谈论gen_tcp打开的套接字,或者读取命名管道.

还是其他任何建议?

BTW这是在Unix系统上运行的.

erlang distributed sh

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

用于JBoss /分布式应用程序的JDBC Profiler

我正在尝试消除一个缓慢的数据库,这是我支持的分布式应用程序的一些性能问题的原因.我已经对服务器本身的应用程序和性能监视的各个方面进行了本地分析,这使我怀疑数据库至少是造成性能不佳的部分原因.

目前我正在使用JBoss作为后端(使用Hibernate/JDBC层连接到数据库),但我只能访问某些代码.

我找到了Elvyx,但是这个项目似乎在2008年被放弃了.是否有更新的JDBC Profiler可用 - 在分布式应用程序中分析数据库的当前'事实上'标准是什么?

或者,任何人都可以建议更好/替代方法吗?

java jboss distributed hibernate jdbc

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

分布式主键 - UUID,简单自动增量或自定义顺序值?

我知道之前已经问过这类问题,但我找不到一个比较我想到的选项.所以我打算在这里发帖,如果有重复,请发帖链接.

这已经结束了一个相当长的帖子,如果你有时间请阅读它,因为问题在最后

编辑2:我已经接受了答案,因为我认为这将是目前最好的解决方案.但是我想我还想回答另外两个问题来回答关于连接数字的问题.它们可以在这里找到:结合两个整数来创建一个唯一的数字C#中的Concatenate整数.如果我打算尝试对数字进行编码(如下所示,如51122222),我认为这会很有用.虽然在c#中使用像String.Format这样的东西对我的小应用程序来说足够快.

我目前正在尝试找到一种方法来设置使用相同数据库模式的分布式应用程序,并且可以与一个主数据库同步,其他所有数据库也同步.

我目前计划的程序将作为一个相当简单的程序来跟踪信息.第一个版本可能包含两个表:Items和ItemHistory.这是可能字段的示例:

项目
ItemID(PK)?
Name String
Content String

ItemHistory
ItemHistoryID(PK)?
ItemID(FK)?
EventName String
CreatedOn DateTime

我已经列出了字段名称和类型,这个问题是关于PK类型的用途,因此它们缺失.

第一个版本将是一个标准的桌面应用程序,我目前正在计划使用带有WPF前端的C#和用于数据库的SQLite.最后我还想创建一个在我的Android手机上运行的版本.这是分布式部件的用武之地.我并不总是有信号,因此需要应用程序脱机运行并允许再次联机时同步.

以下是我到目前为止关于如何处理ID的想法:

  1. 对ID使用UUID,因此不存在合并冲突
  2. 使用自动增量字段并在某个增量中为每个版本的应用程序设置起始编号,例如1表示第一个app,10000表示秒,20000表示第三个等
  3. 使用带偏移值的自动增量字段以避免冲突而数字之间没有大的间隙(mysql具有auto_increment_increment和auto_increment_offset)
  4. 生成我自己的ID,为每个数据库编码一个ID,这样它们就可以拥有自己的自动增量值而不会引起冲突.我发现其他人也有同样的想法:建议ID列使用哪种数据类型?

虽然选项1可行,我过去曾使用它,但我想看看其他选项可能避免UUID问题.我希望有一个解决方案,在调试时更容易阅读并且可以排序.

选项2可行,但它确实限制了记录数量.我知道在我的小应用程序中它几乎不会超过那么多,但我想尝试看看是否有一个解决方案不需要这样的限制.选项3通过使用交替数字来避免限制,但我认为您需要知道要使用多少数据库,否则您可能会填写所有数字.在DB1上使用1的开头和1的增量,在DB2上使用2的开头和2的增量将使用每个数字.您可以使用50作为增量,但之后您只有另一个限制,但现在它可以使用它的应用程序数量.我再次知道它的限制在我的情况下不会受到影响,但在一个突然变得非常受欢迎的应用程序中可能是一个问题.

选项4似乎可以为我解决问题,但我不确定它是否会在实践中起作用.我的一个想法是允许在每个应用程序上设置前缀,然后可以使用自动递增值.例如PC1,PC2用于PC上的记录,也可能是PHONE1,PHONE2等来自Android的记录.这可以工作但是在字符串中使用数字会导致1,1,1,100的排序问题显示在彼此旁边,即使用较少的前导零,然后再次返回到有限数量的记录.

我想知道是否可以使用数字作为DB ID和自动增量.例如,PC = 1,PHONE = 2.那么我们的PC有11,12,13等,第11条记录可能有111条,PHONE则有304条记录为2304条.但我不知道如何做到这一点,或者是否可以轻松完成并且不会导致产生值的额外开销.

在工作中他们使用了类似的编号系统,他们使用类似于51122222的东西.5将引用应用程序的实例,然后是2位数年份,最后是自动递增数字.我还没有得到一个明确的答案,如果我们在一年内超过99999条记录会发生什么.我认为他们可能已经认为它不会发生并且很高兴他们已经计算了风险.

最后一个问题,有没有办法为分布式应用程序创建一个主键系统,允许排序而不强制限制(除了数据类型本身的大小,例如最大整数)?

编辑:这是我打算写的应用程序的更多信息.我想创建一些东西,让我可以存储我可能获得的任何类型的信息,系统将包括标记条目的能力,以便我可以搜索主题.到目前为止,我看到的信息类型可能是关于书籍,DVD,网站等的建议.或者也许是我居住地方的当地提示.一个总体思路是停止将这些信息分散在不同格式的多台计算机/笔记本电脑/手机上.

database distributed database-agnostic

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

从不同节点访问分布式mnesia数据库

我有一个包含不同表的mnesia数据库.

我希望能够从不同的Linux终端访问表.

我有一个调用的函数add_record,这需要几个参数,说nameid.我想能够add_record打开node1add record打开,node2但我想从不同的位置更新同一个表.

我读了几个来源,我发现的唯一一件事就是我应该使用net_adm:ping(node2).但不知何故,我无法从表中访问数据.

database erlang distributed mnesia

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

Java Hadoop:我如何创建作为输入文件的输出器并给出一个输出,即每个文件中的行数?

我是Hadoop的新手,我只是运行wordCount示例:http://hadoop.apache.org/common/docs/r0.18.2/mapred_tutorial.html

假设我们有一个包含3个文件的文件夹.我希望每个文件都有一个映射器,这个映射器只计算行数并将其返回到reducer.

然后,reducer将输入每个映射器的行数作为输入,并将所有3个文件中存在的总行数作为输出.

所以,如果我们有以下3个文件

input1.txt
input2.txt
input3.txt
Run Code Online (Sandbox Code Playgroud)

并且映射器返回:

mapper1 -> [input1.txt, 3]
mapper2 -> [input2.txt, 4]
mapper3 -> [input3.txt, 9]
Run Code Online (Sandbox Code Playgroud)

减速器将输出

3+4+9 = 16 
Run Code Online (Sandbox Code Playgroud)

我在一个简单的java应用程序中完成了这个,所以我想在Hadoop中完成它.我只有一台计算机,并希望尝试在伪分布式环境中运行.

我怎样才能实现这个目标?我应该采取什么适当的措施?

我的代码应该在apache的示例中看起来像那样吗?我将有两个静态类,一个用于mapper,一个用于reducer?或者我应该有3个类,每个映射器一个?

如果你能指导我完成这个,我不知道如何做到这一点,我相信如果我设法编写一些代码来做这些东西,那么我将来能够编写更复杂的应用程序.

谢谢!

java distributed hadoop mapreduce

5
推荐指数
2
解决办法
8231
查看次数

socket appenders - 一步一步的基本示例

你能推荐一下关于在分布式系统中使用log4j的简单教程,特别是关于SocketAppender的吗?

我试图找到一些基本的例子,但我失败了.

java distributed log4j appender

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

HRW会合在一起记录日志时间吗?

Rendezvous哈希(最高随机权重"HRW")的维基百科页面提出以下声明:

虽然可能首先看起来HRW算法在O(n)时间内运行,但事实并非如此.这些站点可以按层次结构进行组织,并且HRW在每个级别应用为层次结构,从而导致O(log n)运行时间,如.[7]

我得到了参考文献的副本,"用于移动Ad-hoc网络中可扩展位置服务的基于哈希的虚拟层次结构".但是,他们的论文中引用的层次结构似乎非常特定于其应用程序域.据我所知,没有明确说明如何推广该方法.维基百科的评论使得日志似乎一般情况.

我看了几个一般的HRW实现,但它们似乎都没有比线性时间更好的支持.我给了它一些想法,但我没有看到任何方法来分层组织网站,而不会导致父节点在退出时导致低效的重新映射,从而大大打败了HRW的主要优势.

有人知道怎么做这个吗?或者,维基百科是不正确的,在日志时间有一般的方法来实现这一点?

编辑:调查mcdowella的方法:

好的,我想我知道这是如何起作用的.但是你需要比你指定的更多一点.

如果你只是按照你所描述的那样做,你会遇到这样的情况:每个叶子可能只有零个或一个节点,并且叶子最多的子树中有多少个节点存在显着的差异.如果您在每个级别使用HRW进行交换,只需将整个事物设置为常规搜索树,您就会获得完全相同的效果.从本质上讲,你已经实现了一致的散列,以及在桶之间加载不均等的缺陷.计算组合权重,HRW的定义实施,没有增加任何内容; 你最好只是在每个级别进行搜索,因为它可以节省散列,并且可以在不循环每个基数值的情况下实现

但它是可以解决的:您只需要使用HRW从最终级别的许多替代方案中进行选择.也就是说,您需要所有叶节点都在大型桶中,与一致散列中的副本数相当.这些大型桶应相互大致相等,然后您使用HRW选择特定站点.由于存储桶大小是固定的,这是一个O(n)算法,我们得到了所有关键的HRW属性.

老实说,我认为这是值得怀疑的.它不是HRW的实现,因为它只是将HRW与一致的散列相结合.我想这并没有什么不妥,在某些情况下,它甚至可能比使用复制品的常用技术更好.但我认为说明HRW是log(n)是错误的,如果这实际上是作者的意思.

此外,原始描述也值得怀疑.您不需要在每个级别应用HRW,您不应该这样做,因为这样做没有任何优势; 你应该快速做一些事情(比如索引),然后用HRW作最后的选择.

这真的是我们能做的最好的,还是有其他方法来制作HRW O(log(n))?

algorithm hash distributed hashtable asymptotic-complexity

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

从外部内容加载动态组件

我正在研究的系统由许多分布式微服务组成,每个组件的潜在多个版本可能同时处于活动状态.

我试图构建的Angular2应用程序应该能够通过websockets与这些组件中的每一个进行交互.因为为每个组件的所有未来版本和功能,相应的协议实现甚至新组件准备此应用程序似乎是不可行的,所以我想将此责任推给组件本身.

每个组件都能够通过在同一个websocket连接上发送的包传递其功能(以NG2组件的形式)以及协议实现和必要的GUI元素(HTML/CSS).

是否有一种模式可以在ng2中实现这种"按需加载"组件及其模板?

distributed microservices angular2-template angular

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

改进bigint写入磁盘性能

我正在使用非常大的bigint数字,我需要将它们写入磁盘并稍后再读取它们,因为它们一次都不适合内存.

当前的Chapel实现首先将其转换bigint为a string,然后将其写入string磁盘[1].这对于大整数来说需要很长时间.

var outputFile = open("outputPath", iomode.cwr);
var writer = outputFile.writer();
writer.write(reallyLargeBigint);
writer.close();
outputFile.close();
Run Code Online (Sandbox Code Playgroud)

有没有办法使用GMP的mpz_out_raw()/ mpz_inp_raw()[2]或mpz_export()/ mpz_import()[3]或其他类似的方式bigint直接将字节转储到磁盘而不事先转换为字符串然后将字节读回到bigint对象?

这也适用于bigint阵列吗?

如果在当前状态下不可能将这些功能添加到Chapel的标准库中,怎么可能?

[1] https://github.com/chapel-lang/chapel/blob/master/modules/standard/BigInteger.chpl#L346

[2] https://gmplib.org/manual/I_002fO-of-Integers.html

[3] https://gmplib.org/manual/Integer-Import-and-Export.html

distributed bigint parallelism-amdahl chapel

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