您能否分享一下您如何在PostgreSQL中实现数据版本控制?(我已经问过关于Cassandra和MongoDB的类似问题.如果您有任何想法,哪个数据库更好,请分享)
假设我需要在简单的地址簿中对记录进行版本控制.为简单起见,地址簿记录存储在一个表中而没有关系.我期待历史:
我正在考虑以下方法:
创建一个新的对象表来存储记录的历史记录,其中包含地址簿表的模式副本,并将时间戳和外键添加到地址簿表中.
创建一种架构较少的表来存储对通讯录记录的更改.这样的表包括:AddressBookId,TimeStamp,FieldName,Value.这样我只存储记录的更改,我不必保持历史表和地址簿表同步.
创建一个表来存储seralized(JSON)通讯簿记录或更改通讯簿记录.这样的表看起来如下:AddressBookId,TimeStamp,Object(varchar).同样这是架构,所以我不必保持历史表与地址簿表同步.(这是使用CouchDB进行简单文档版本控制后建模的)
我的目标是从python套接字向java套接字发送消息.我确实看了上面提到的资源.但是我很难让Python客户端与Java服务器通信.主要是因为python中的(行尾)与java中的不同.
说我从python客户端写:消息1:abcd消息2:efgh消息3:q(退出)
在java服务器:我收到消息1:abcdefghq后跟异常,因为python客户端从它的末尾关闭了套接字.
任何人都可以建议一个解决方案,以便在java和python之间进行一致的讨论.
我使用的参考:http://www.prasannatech.net/2008/07/socket-programming-tutorial.html
更新:我忘了添加,我正在研究TCP.
我的JAVA代码是这样的:(服务器套接字)
String fromclient;
ServerSocket Server = new ServerSocket (5000);
System.out.println ("TCPServer Waiting for client on port 5000");
while(true)
{
Socket connected = Server.accept();
System.out.println( " THE CLIENT"+" "+ connected.getInetAddress() +":"+connected.getPort()+" IS CONNECTED ");
BufferedReader inFromClient = new BufferedReader(new InputStreamReader (connected.getInputStream()));
while ( true )
{
fromclient = inFromClient.readLine();
if ( fromclient.equals("q") || fromclient.equals("Q") )
{
connected.close();
break;
}
else
{
System.out.println( "RECIEVED:" + fromclient );
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的PYTHON代码:(客户端套接字)
client_socket …Run Code Online (Sandbox Code Playgroud) 我必须从数据库接收特定于用户的工作人员.
所有用户的过滤器都是不同的,所以必须将所有订单发送到英国,其他所有订单都运送到其他5个国家,一个包含所有高价值的商品,一个包含包含> 10个商品的订单等.
那么,我想出了这个想法(如果你有一个更好的想法就拍它!)
我为每个用户创建一个视图,所有视图返回相同的数据,但过滤器是不同的.
在ado.net中我会做这样的事情:
string sql = "select * from vwWorkOrders" + userName;
[rest of the ado.net here]
Run Code Online (Sandbox Code Playgroud)
但现在我正在使用ef4,我想知道这种代码的等价物是什么.
让我们假设一段测试代码:
Observable model = Class.forName(fullyQualifiedMethodName).newInstance();
Observer view = Mockito.mock(Observer.class);
model.addObserver(view);
for (Method method : Class.forName(fullyQualifiedMethodName).getDeclaredMethods())
{
method.invoke(model, composeParams(method));
model.notifyObservers();
Mockito.verify(
view, Mockito.atLeastOnce()
).update(Mockito.<Observable>any(), Mockito.<Object>any());
}
Run Code Online (Sandbox Code Playgroud)
Mockito.verify如果模型中的Observable.setChanged()方法没有调用方法,则抛出异常.
问题:没有添加loggers/System.print.out我无法意识到当前测试失败的方法是什么.有没有办法与jUnit Assert方法类似:
Assert.assertEquals(
String.format("instances %s, %s should be equal", inst1, inst2),
inst1.getParam(),
inst2.getParam()
);
Run Code Online (Sandbox Code Playgroud)
解:
verify(observer, new VerificationMode()
{
@Override
public void verify(VerificationData data)
{
assertTrue(
format(
"method %s doesn't call Observable#setChanged() after changing the state of the model",
method.toString()
),
data.getAllInvocations().size() > 0);
}
}).update(Mockito.<Observable>any(), Mockito.<Object>any());
Run Code Online (Sandbox Code Playgroud) 可能重复:
如何在java中发送HTTP请求?
如何使用java.net.URLConnection来触发和处理HTTP请求?
使用java,我怎么打任何网址?
例如,在浏览器中打开http://www.xyz.com/node1会告诉xyz.com node1被命中.所以在这个java程序中(它发送sms文本,将上面示例中的'node1'嵌入到url本身的sms网关服务器中)
如何在不打开任何浏览器或使用servlet的情况下实现它.
在Java中,try {...} finally {...}对我来说有些不直观.如另一个问题所示,最终总是在Java中执行吗?,如果try块中有return语句,则在定义finally块时将忽略它.例如,功能
boolean test () {
try {
return true;
}
finally {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
总是会返回false.我的问题:这是为什么?这个由Java做出的设计决策背后有一个特定的哲学吗?我很感激任何见解,谢谢.
编辑:我特别感兴趣的是'为什么'Java认为可以违反我定义的语义.如果我在try块中'返回',那么该方法应该在那里返回.但是JVM决定忽略我的指令并从一个实际尚未到达的子程序返回.
我试图更改Flex/Flash 4应用程序中链接栏的背景颜色和alpha.无论我定义什么属性,所述链接栏的背景总是白色的.请参见图片http://i.stack.imgur.com/PyHs2.png.
<mx:LinkBar id="lnkBar" backgroundAlpha="0" backgroundColor="black" bottom="0" itemClick="lnkBar_itemClickHandler(event)">
<mx:dataProvider>
<s:ArrayCollection>
<fx:String>Resource Management</fx:String>
<fx:String>Standard Reports</fx:String>
<fx:String>Clear Selected State</fx:String>
</s:ArrayCollection>
</mx:dataProvider>
</mx:LinkBar>
Run Code Online (Sandbox Code Playgroud) 每当我需要将动态分配的对象添加到向量中时,我一直在做以下方式:
class Foo { ... };
vector<Foo*> v;
v.push_back(new Foo);
// do stuff with Foo in v
// delete all Foo in v
Run Code Online (Sandbox Code Playgroud)
它只是工作,许多其他人似乎做同样的事情.
今天,我学会了vector :: push_back可以抛出异常.这意味着上面的代码不是异常安全的.:-(所以我提出了一个解决方案:
class Foo { ... };
vector<Foo*> v;
auto_ptr<Foo> p(new Foo);
v.push_back(p.get());
p.release();
// do stuff with Foo in v
// delete all Foo in v
Run Code Online (Sandbox Code Playgroud)
但问题是新的方式冗长乏味,我看到没有人这样做.(至少不在我身边......)
我应该采用新的方式吗?
或者,我可以坚持旧的方式吗?
或者,有更好的方法吗?