小编Eri*_*ard的帖子

如何加速从大型数据库表中删除?

这是我试图解决的问题:我最近完成了数据层重新设计,允许我跨多个分片对数据库进行负载平衡.为了保持碎片平衡,我需要能够将数据从一个碎片迁移到另一个碎片,这涉及从碎片A复制到碎片B,然后从碎片A中删除记录.但是我有几个非常大的表,并且有许多外键指向它们,因此从表中删除单个记录可能需要一秒以上.

在某些情况下,我需要从表中删除数百万条记录,实际上只需要很长时间.

禁用外键不是一种选择.删除大批量的行也不是一种选择,因为这是一个生产应用程序,而大型删除会锁定太多资源,从而导致失败.我正在使用Sql Server,而且我知道分区表,但是对分区的限制(以及企业版的许可费用)是如此不切实际,以至于它们是不可能的.

当我开始研究这个问题时,我认为困难的部分是编写算法,该算法计算出如何从叶级别删除行到数据模型的顶部,以便在此过程中不会违反外键约束.但解决这个问题对我没有好处,因为删除需要在一夜之间消失的记录需要数周时间.

我已经建立了一种将数据标记为虚拟删除的方法,因此就应用程序而言,数据已经消失,但由于其庞大的大小,我仍在处理大型数据文件,大型备份和较慢的查询.表格.

有任何想法吗?我已经在这里阅读了较旧的相关帖子,但没有发现任何有用的信息.

database sql-server scalability sharding

23
推荐指数
3
解决办法
3万
查看次数

OpenID是如何实现的?

您将如何设计和实现OpenID组件?

(是"OpenId如何工作")

我意识到这个问题有点重复,是的,我已阅读规范维基百科的文章.

在阅读了上面提到的材料后,我仍然无法全面了解过程中每个步骤的处理方式.也许缺少的是一个关于OpenID实现如何工作的良好工作流程图.

我正在考虑将OpenID合并到我的一个应用程序中以容纳B2B单点登录方案,我可能会使用DotNetOpenID而不是尝试自己实现它,但我仍然希望在获得之前更好地掌握细节开始.

任何人都可以推荐能够很好地解释它的书籍或网站吗?在这个网站上有一个涵盖基础知识的答案也没有什么坏处.

[编辑]

我将标题更改为更具体的实现,因为显然有很多地方可以获得一万英尺的视图.

openid dotnetopenauth

20
推荐指数
1
解决办法
3498
查看次数

为SqlServer查找表使用tinyint而不是int是否值得?

在SqlServer 2005中设计查找表(枚举)时,如果你知道条目的数量永远不会很高,你应该使用tinyint而不是int吗?我最关心的是性能,特别是索引的效率.

假设您有这些代表性表格:

Person
------
PersonId int  (PK)
PersonTypeId tinyint  (FK to PersonTypes)
Run Code Online (Sandbox Code Playgroud)

PersonTypes
-----------
PersonTypeId tinyint
PersonTypeName varchar(50)
Run Code Online (Sandbox Code Playgroud)

显而易见的因素是数据大小和编码麻烦.当我们在person表中获得1亿行时,我们使用tinyint而不是int存储3亿个字节,加上索引占用的空间.不是大量的数据,但如果将设计决策应用于数十个大表,则意义重大.当然,编码麻烦来自ASP.NET C#/ VB代码中的所有那些转换问题.

如果我们搁置这两个问题,还有什么可以发挥作用?由于索引页面的大小减小,查询会更有效吗?或者是否存在某种填充,只会否定其好处?还有其他陷阱吗?

我一直只是个人使用,但我正在考虑在一些巨大的桌子上进行重新设计/迁移工作的tinyint,所以我很想得到一些建议.

[编辑]

在尝试了这个之后,我预期的编码麻烦结果证明是无问题的.从int更改为tinyint并没有导致任何铸造问题.

sql sql-server database-design

20
推荐指数
1
解决办法
6580
查看次数

如何在C#3.0中使用部分方法?

我已经阅读了最新C#语言规范中的部分方法,所以我理解了原理,但我想知道人们是如何使用它们的.是否有特定的设计模式可以从部分方法中受益?

c# design-patterns partial-methods .net-3.5

18
推荐指数
2
解决办法
7766
查看次数

什么是一个很好的开源VoiceXML实现?

我试图找出是否可以通过将开源项目中的部分拼凑在一起来构建完整的IVR应用程序.是否有人使用非商业VoiceXML实现来构建支持语音的系统?

ivr voip speech-recognition voicexml

13
推荐指数
1
解决办法
6458
查看次数

如何使用System.Net.Mail设置SMTP信封MAIL FROM?

使用C#和System.Net.Mail命名空间发送电子邮件时,可以在MailMessage对象上设置"发件人"和"发件人"属性,但这些都不允许您创建MAIL FROM和来自的地址进入DATA部分彼此不同.MAIL FROM设置为"From"属性值,如果设置"Sender",它只在DATA部分添加另一个头字段.这导致"来自X@Y.COM代表A@B.COM",这不是您想要的.我错过了什么吗?

用例是控制代表其他人发送的新闻稿等的NDR目的地.

我目前正在使用aspNetEmail而不是System.Net.Mail,因为它允许我正确地执行此操作(与大多数其他SMTP库一样).使用aspNetEmail,可以使用EmailMessage.ReversePath属性完成此操作.

.net c# smtp

13
推荐指数
2
解决办法
2万
查看次数

如何在分布式数据上实现排序和分页?

这是我试图解决的问题:

我需要能够显示存储在多个数据库分片中的分页,排序数据表.

分页和排序是众所周知的问题,当数据来自单一来源时,我们大多数人都可以通过多种方式解决这些问题.但是,如果您要跨分片或使用DHT或分布式文档数据库或您喜欢的任何NoSQL风格分割数据,事情会变得更加复杂.

这是一个非常小的数据集的简单图片:

碎片| 数据
1 | A
1 | D
1 | G
2 | B
2 | E
2 | H
3 | C
3 | F
3 | 一世

分页到页面(页面大小= 3):

页面| 数据
1 | A
1 | B
1 | C
2 | D
2 | E
2 | F
3 | G
3 | H
3 | 一世

如果我们想要显示用户页面2,我们将返回:

D
E
F.

如果所讨论的表的大小类似于1000万行或1亿行,则不能仅将所有数据下载到Web /应用程序服务器上以对其进行排序并返回正确的页面.而且你显然不能让每个单独的分片排序并分页自己的数据片段,因为分片彼此不了解.

更复杂的是,我需要呈现的数据不能太过时,因此提前预先计算一组有用的排序并存储结果以供以后检索是不切实际的.

sorting sharding distributed-computing

13
推荐指数
1
解决办法
4922
查看次数

如何在ADO.NET EF 4.1中记录记录?

我正在尝试完成一些非常简单的事情,但我无法使用Entity Framework 4.1找到它.

我想要一个接受对象然后执行UPSERT的控制器方法(根据数据库中是否存在记录,插入或更新).

我使用的是自然键,所以我无法查看我的POCO并告诉它是否是新的.

这就是我这样做的方式,对我来说似乎不对:

[HttpPost]
public JsonResult SaveMyEntity(MyEntity entity)
{            
    MyContainer db = new MyContainer(); // DbContext
    if (ModelState.IsValid)
    {
        var existing =
            db.MyEntitys.Find(entity.MyKey);
        if (existing == null)
        {
            db.MyEntitys.Add(entity);
        }
        else
        {
            existing.A = entity.A;
            existing.B = entity.B;
            db.Entry(existing).State = EntityState.Modified;
        }
        db.SaveChanges();
        return Json(new { Result = "Success" });
    }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,整个事情就是这样:

db.MyEntities.AddOrModify(entity);
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-4.1

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

在ASP.NET MVC中实现用户控件的最佳方法是什么?

像这个网站上的许多其他人一样,我正在考虑转向ASP.NET MVC以用于未来的项目.目前我的网站运行的是传统的ASP.NET 2.0 Web窗体,它对我们来说没问题,所以我的另一个选择就是坚持我所知道的,并使用集成的AJAX东西转移到ASP.NET 3.5.

我想知道用户控件如何在ASP.NET MVC中工作.我们有大量的.ASCX控件和一些复合控件.当我与网页设计师合作时,很容易让他们有效地使用ASCX控件,即使没有任何编程知识,这是一个明确的优点.但当然缺点是页面生命周期,这可能令人抓狂,并且ASCX控件很难在不同项目之间共享.复合控件是可共享的,但基本上是设计师的黑盒子.

ASP.NET MVC中的模型是什么?有没有办法创建控件来解决我们使用ASCX和复合控件处理的问题?允许Web设计人员轻松访问而不必担心代码被破坏是一个重要的考虑因素.

asp.net-mvc user-controls

11
推荐指数
1
解决办法
4700
查看次数

如何在HBase客户端应用程序中抑制INFO日志?

我正在编写一个访问HBase的Java控制台应用程序,我无法弄清楚如何摆脱所有恼人的INFO消息:

13/05/24 11:01:12 INFO zookeeper.ZooKeeper: Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GMT
13/05/24 11:01:12 INFO zookeeper.ZooKeeper: Client environment:host.name=10.1.0.110
13/05/24 11:01:12 INFO zookeeper.ZooKeeper: Client environment:java.version=1.7.0_15
13/05/24 11:01:12 INFO zookeeper.ZooKeeper: Client environment:java.vendor=Oracle Corporation
13/05/24 11:01:12 INFO zookeeper.ZooKeeper: Client environment:java.home=/Library/Java/JavaVirtualMachines/jdk1.7.0_15.jdk/Contents/Home/jre
Run Code Online (Sandbox Code Playgroud)

等等...

我从客户端代码本身尝试了几种不同的东西,但没有一种明显的方法对我有用.

这是一个不起作用的例子:

Logger log = Logger.getLogger("log4j.logger.org.apache.zookeeper");
log.setLevel(Level.WARN);
Run Code Online (Sandbox Code Playgroud)

java hbase

11
推荐指数
1
解决办法
5578
查看次数