小编Seb*_*olm的帖子

将版本/历史记录系统添加到数据库表

我正在开发一个项目,我必须在每个表中添加一种数据版本控制或历史记录功能.基本上,我们必须跟踪数据库中的每个插入或更改,以便可以轻松回滚或查看每个表中的数据的先前版本.

我的项目经理设想这样做的方法是为每个表添加一些新的颜色.主要特征是名为"版本"的coloumn.每次更新时,都没有真正更新,旧行仍然存在但是新行添加到表中,其中"version"的值递增.

要显示当前数据,我们只使用一个视图,该视图仅显示每种类型的版本号最高的行.

虽然这在不同版本之间来回移动时效果很好,但我遇到了这种方法的问题.对于表之间存在的任何关系,我们需要定义外键,外键只能引用另一个表中的唯一字段.既然我们保留了同一行的多个版本(具有相同的'Id',因为它与我们的应用程序有关,它基本上是相同的数据)我们不能再使用另一个表的'Id'作为外键一张桌子.

我们为每一行使用唯一的主键字段,但这对于标识符是无用的,因为几行基本上是同一事物的不同版本.我们可以手动跟踪每种条目的最新版本,并在每次更改时更新相应的外键关系,但这看起来像很多工作,我不确定它是否总能工作(例如,恢复到以前的版本一个条目可能导致外键引用其他表中另一个条目的旧版本和不可用版本.)

我知道还有其他方法可以保存数据库更新的历史记录(例如,通过为每个表使用单独的历史表),但我在这个项目中坚持这种方法.是否有一些更明显的方法来处理这样的表之间的关系,我错过了?

注意:我正在使用MS SQL Server 2008 R2.

database sql-server-2008

7
推荐指数
1
解决办法
1万
查看次数

用于快速位置查找的数据结构

寻找逻辑上表示由唯一ID键入的元素序列的数据结构(为了简单起见,我们将它们视为字符串,或至少是可清除对象).每个元素只能出现一次,没有间隙,第一个位置为0.

应支持以下操作(使用单字母字符串演示):

  • insert(id, position)- 将键入的元素添加id到偏移量的序列中position.当然,序列中稍后的每个元素的位置现在增加1.例:[S E L F].insert(H, 1) -> [S H E L F]
  • remove(position)- 删除偏移处的元素position.将序列中稍后的每个元素的位置减一.例:[S H E L F].remove(2) -> [S H L F]
  • lookup(id)- 找到键入的元素的位置id.[S H L F].lookup(H) -> 1

天真的实现可以是链表或数组.双方将给出O(N) lookup,removeinsert.

在实践中,lookup很可能是使用最多,insertremove发生足够频繁,这将是不错不是线性的(其中的HashMap +阵列/列表的简单组合会让你).

在一个完美的世界中,它将是O(1)lookup,O(log n)insert/ remove,但我实际上怀疑从纯粹的信息理论角度来看是不行的(尽管我还没有尝试过),所以O(log n )lookup仍然会很好.

language-agnostic data-structures

7
推荐指数
1
解决办法
1558
查看次数

在json对象中执行javascript代码?

在哪儿?

像这样的东西:

{ key1 : "val1", key2: "val2", some_code: "document.getElementById("someid").innerHTML='test';" }
Run Code Online (Sandbox Code Playgroud)

那么some_code将在没有任何用户干预的情况下执行?

javascript json eval

6
推荐指数
1
解决办法
1万
查看次数

使用facebook登录的asp .net 4.0会员资格

我们将在asp .net 4.0中开发web应用程序.在此,我们使用asp .net成员资格提供程序登录该应用程序.我们想要将facebook登录与此应用程序集成.用户可以使用facebook凭证登录此应用程序,它将在我们的应用程序中进行身份验证.应用程序将允许用户从该网站邀请Facebook好友.

请建议我这个!是否有任何facebook API可用于此或任何其他方式..?

asp.net facebook

6
推荐指数
1
解决办法
5746
查看次数

WWW :: Mechanize提交时文件名不正确

至于我可以从WWW :: Mechanize文档中读取,您可以执行以下操作从字符串提交文件:

$mech->submit_form(
    fields => {
        'UploadedFile' => [[ undef, 'test2.txt', Content => $content ], 1],
    }
);
Run Code Online (Sandbox Code Playgroud)

这应该提交一个带有名称的文件text2.txt,其中包含文本$content(在本例中'The file is a lie.').

但是,请求因内部服务器错误而失败,因此我检查了发送的请求,并发现了:

--xYzZY
Content-Disposition: form-data; name="UploadedFile"; filename="ARRAY(0x9567570)"

The file is a lie.
--xYzZY
Run Code Online (Sandbox Code Playgroud)

这显然不是我指定的文件名,所以我想知道:我做错了什么,或模块是否被窃听?

perl www-mechanize

6
推荐指数
1
解决办法
222
查看次数

PHP奇怪的结果乘以-1

$res = 0.0 * -1.0;
Run Code Online (Sandbox Code Playgroud)

我得漂浮-0

这种奇怪的行为是什么?

php floating-point

6
推荐指数
2
解决办法
129
查看次数

使用套接字进行进程间通信的限制是什么?

我正在创建一个Firefox扩展,允许在Firefox中使用Standard ML(SML)作为客户端编程语言.它的工作方式如下:

  1. 该扩展启动了PolyML进程(具有顶级交互式shell的SML编译器).
  2. 然后在扩展和PolyML过程之间建立套接字通信.
  3. 从网页读取SML代码,并通过套接字发送到PolyML流程进行评估.
  4. 然后,该代码可以使用我提供的库来处理DOM.

以下是DOM库的实现方式:

  1. 假设有人执行SML函数DOM.getElementById
  2. 此请求通过套接字转发到扩展,扩展在页面上执行JavaScript函数getElementById,并通过套接字将结果发送回PolyML进程.

我的问题是,理论上,在套接字通信方面,我应该期待在性能方面有什么限制?

我做了一些非常近似的分析,似乎在扩展和PolyML之间使用这个接口,我可以大约发送2500条消息/秒,平均大小为70字节/消息.

为了说明这一点,我想在浏览器中使用Canvas元素绘制一些动画.如果我想达到20fps,这意味着我需要在0.05秒内绘制每一帧,这意味着我每帧只能发送大约125条消息.这些消息对应于JavaScript函数调用.例如,下面的代码绘制一个路径并进行9次JavaScript函数调用,这些调用对应于套接字通信中的9条消息.

val _ = Canvas.beginPath context;
val _ = Canvas.setFillStyle context fillColor;
val _ = Canvas.setStrokeStyle context fillColor;
val _ = Canvas.setLineWidth context size;
val _ = Canvas.moveTo context posx posy;
val _ = Canvas.lineTo context posx_new posy_new;
val _ = Canvas.stroke context;
val _ = Canvas.arc context posx_new posy_new (size/2.0) 0.0 6.28 true;
val _ = Canvas.fill context;
Run Code Online (Sandbox Code Playgroud)

显然,JavaScript有更好的性能,我想你可以在0.05秒内完成数千(数百)次Canvas/DOM函数调用,用于绘制帧.

所以,我想我的问题是,您是否有使用套接字通信进行非常快速的消息交换的经验.我想知道2500条小信息/秒(在这种情况下,相当于150千字节/秒)是否正确或者我可能做错了什么.

例如,有人怀疑firefox中的套接字实现(特别是通过JavaScript接口https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIServerSocket使用它)对于这种快速交互并不是很好.例如,从套接字读取是通过事件循环机制完成的.那就是我依靠Firefox ..来通知我有关传入套接字消息的可用性,有时在发送消息和接收它之间有一个很大的(例如250ms)延迟(虽然这似乎只有在firefox忙于做的时候才会发生其他的事情,我对套接字通信的理论限制更感兴趣 …

sockets firefox sml firefox-addon interprocess

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

基于列表在python numpy中排列数据的最快方法

我在numpy示例中排列数据有问题a有数据范围列表:

numpy.array([1,3,5,4,6])
Run Code Online (Sandbox Code Playgroud)

我有数据:

numpy.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])
Run Code Online (Sandbox Code Playgroud)

我需要安排数据

numpy.array([

[1,9999,9999,9999,9999,9999,9999]

[2,3,4,9999,9999,9999]

[5,6,7,8,9,9999]

[10,11,12,13,9999,9999]

[14,15,16,17,18,19]

])
Run Code Online (Sandbox Code Playgroud)

我认为它与diag /对角线/跟踪功能有点相似.

我通常使用基本的迭代来完成这项工作... numpy有这个功能所以它可以执行得更快吗?

python arrays numpy

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

用于刷新其他命令输出的命令

如果我有一个命令,每次给我一个输出,(例如一个状态).例如,我怎么能每隔2秒刷新一次这个输出呢?我记得有一个命令可以做到这一点.例:

cat /proc/mdstat 

[======>..............]  resync = 30.8% (150544832/488383936) finish=65.8min speed=85472K/sec

othercommand cat /proc/mdstat
Run Code Online (Sandbox Code Playgroud)

谢谢

bash command refresh

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

Python Tkinter Root Title不起作用

我似乎无法标题我的窗户.他们都有"Tk"的标题.我相信我的代码是正确的,所以如果这是错的,请纠正我...

from Tkinter import * 
root = Tk()
root.title="Title"
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

标题仍然是Tk().我可以from Tkinter import Tk as MyTitle吗?

python user-interface tkinter

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