我有一个大型(数千万条记录)数据库,我将在其上执行完整的数据库备份。
但是,数据库足够大,事务可以在备份发生之前和期间启动,也可以在备份发生期间和之后提交。
例如:
T0 = Transaction A start
T1 = Full database backup start
T2 = Transaction B start (will not deadlock with A)
T3 = Transaction A commit/rollback (does not matter, does it?)
T4 = Full database backup end
T5 = Transaction B commit/rollback (again, does not matter, does it?)
T0 T1 T2 T3 T4 T6
||----------||----------||----------||----------||----------||---------->
Run Code Online (Sandbox Code Playgroud)
我的理解是在备份期间不使用锁(尽管由于高 I/O 可能会出现其他性能问题),但我不确定我能保证什么会被提交。
此外,我担心的不是数据库将处于不一致状态,而是该状态将是什么(即使它不是确定性的,如果有一组可以一致应用的规则)以及它是如何到达那里的(例如,有多少数据文件与事务日志一起用于创建备份文件)?
我正在尝试找出创建 SQL Server 主键、外键和约束的最佳方法,以在 LINQ/实体数据对象中准确表示我的数据模型。让我们假设 - 为简化起见 - 我有四个主要表 - Cats、Dogs、Pets 和 Owners - 以及一个关联表:OwnersToPets:
create table Cats (
ID_Cats int NOT NULL IDENTITY PRIMARY KEY,
Name nvarchar(50) NOT NULL,
miceEaten int NULL
)
create table Dogs (
ID_Dogs int NOT NULL IDENTITY PRIMARY KEY,
Name nvarchar(50) NOT NULL,
favouriteToy nvarchar(50) NULL
)
create table Owners (
ID_Owners int NOT NULL IDENTITY PRIMARY KEY,
Name nvarchar(50) NOT NULL,
)
create table Pets (
ID_Pets int NOT NULL IDENTITY PRIMARY KEY, …
Run Code Online (Sandbox Code Playgroud) (注意:这个问题也存在于 StackOverflow 上,但我认为它在这里可能会有更好的接收。如果它证明这是更好的地方,我会关闭/要求迁移/链接到这个。另外,如果它没有真的属于这里,我很乐意删除它。)
我一直在为我的项目的下一阶段寻找以下NoSQL数据库:
elasticsearch 将自己定位为主要服务于高级搜索场景,而 RavenDB 将自己定位为面向文档的数据库。
该文档主要围绕视频展开。每个都有一个自然的id。这将是文件的关键。
围绕这一点,我在字段中添加了其他内容,这些内容不一定是标量或平面,因为信息将来自许多具有不同结构的不同来源。
例如,将有来自视频提供商的 Atom 提要的内容、嵌入了视频的博客文章以及来自数据仓库项目的其他数据。
所有项目都没有固定的结构(实际上,每个项目都非常特定于领域),唯一将它们关联起来的是上述视频的自然关键。
也就是说,一旦我在上述解决方案之一中获得了这些信息,我就会想用它做很多事情:
有一些要求:
我很可能会在 ASP.NET 共享 Web 托管环境中。这意味着我将拥有一台机器,并且无法设置服务。嵌入的东西将是非常有益的。
ASP.NET 环境将托管在 IIS 中,因此可嵌入方面必须能够经受住应用程序域回收。
我想根据统计分析的结果创建新的索引,我可以轻松地对这些索引进行分析,这将有助于在站点上进行搜索。
支持自动完成功能(我知道这不是“开箱即用”的请求,但能够达到这一点很重要)。
丰富的同义词支持(在我索引内容的视频类型中有很多)
我也对服务持开放态度,例如Truffler,尽管我确实担心成本(在特鲁弗勒的情况下,有点担心数据中心之间的延迟,因为请求将来自西海岸的网络主机,或来自东海岸的后端进程)。
此外,我不认为一种解决方案需要满足所有要求。让一个服务于一个目的而让另一个服务于另一个目的,我觉得很好。当然,迁移很糟糕,但是在这两个文档存储之间迁移要容易一些(而且我不希望它们必然使用相同的文档结构)。
我正在为已抓取的多个博客站点的内容构建数据存储。这些站点中的每一个都将在Blog
表中包含一个条目
BlogId Url Version
int, PK, identity varchar(2500), not null int, not null
----------------- ----------------------- -------------
1 'http://site1.com/ 1
2 'http://site2.com/ 1
3 'http://site2.com/ 2
Run Code Online (Sandbox Code Playgroud)
然后会有一张Post
表:
BlogId Url PostId
int, FK, not null varchar(2500) not null ?
Run Code Online (Sandbox Code Playgroud)
对于我正在查看的大多数博客,我可以轻松辨别出 PostId
对它们来说独一无二价值。
对于所有博客,Url
将是唯一的BlogId
值。但是,Url
是经常可能发生变化。
但是,有一些博客PostId
在抓取 HTML 时我无法辨别出很好的价值。在这些情况下,我可以得到datetimeoffset
发布帖子的信息。发布频率的准确性在分钟级别。
问题是,我需要使用BlogId
和PostId
但我不确定我应该输入什么PostId
。我一直在想两个选择:
sql_variant
- 我可以int
对我的大多数网站使用 an ,这很好,然后datetimeoffset
用于那些我无法轻易辨别唯一数字的网站PostId
bigint …
sql-server-2008 database-design sql-server unique-constraint