标签: acid

数据库的SQL Server和ACID属性

我是数据库和SQL Server的新手.

因此,当我在互联网上搜索关于数据库的事情时,我发现如果数据库服从或遵循ACID(原子性,一致性,隔离性,耐久性)属性,那么数据库就说是好的.

我想知道Microsoft SQL Server(任何版本当前或以前的版本)在内部遵循ACID属性,或者如果我们在我们的应用程序中使用MS SQL Server,那么我们必须编写编码,使得我们的应用程序遵循ACID属性.

简而言之:维护ACID属性数据库的任务(或责任) 或其应用程序编程的任务.

谢谢..

database sql-server acid

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

非ACID数据库合规性对现实世界有什么影响?

具体而言,是否存在数据丢失的风险?我正在考虑运行一个密集的事务处理系统,在这个系统中,任何事情都不会丢失.是否有任何关于在关键任务应用程序中使用NoSQL的例子,例如银行交易处理?

database acid nosql

3
推荐指数
2
解决办法
1668
查看次数

哈斯克尔:Yesod和州

我正在阅读Toy URL Shortener的代码.然而,有一些重要的部分我无法理解.

它具有以下代码:

data URLShort = URLShort { state :: AcidState URLStore }
Run Code Online (Sandbox Code Playgroud)

出于测试目的,我在自己的应用程序中写了这样的东西:

data MyApp = MyApp { state :: Int }
Run Code Online (Sandbox Code Playgroud)

然后我可以通过改变来编译

main = warpDebug 3000 MyApp
Run Code Online (Sandbox Code Playgroud)

main = warpDebug 3000 (MyApp 42)
Run Code Online (Sandbox Code Playgroud)

然后,我可以通过执行操作来读取处理程序中的状态

mystate <- fmap state getYesod 
Run Code Online (Sandbox Code Playgroud)

受到acid <- fmap state getYesod文章的启发.但是,我不知道怎么写.

我也尝试过:

data MyApp = MyApp { state :: State Int Int }
Run Code Online (Sandbox Code Playgroud)

但我对此并没有做多少.

我试图AcidState通过做一些简单的类似例子来弄清楚它是如何工作的,并且认为既然AcidState将所有内容保存在内存中,我应该能够做同样的事情吗?

对这里发生的事情的任何形式的一般性解释,以及也许我如何忽略这一点都将非常感激.

state haskell acid yesod

3
推荐指数
1
解决办法
889
查看次数

插入失败,但身份值增加,这会破坏原子性规则吗?

当我从大型Excel中将数据导入新表时,如果一个记录失败,则不会导入任何内容.我认为这是可以的,因为它符合原子性规则.但是,当我修复源数据错误并再次导入时,标识列不是从1开始,而是从一个大值开始.

例如

create table #test (id int identity(1,1), name varchar(4) default '')

insert into #test (name) values('1 insert will failed');
select ident_current('#test') as ident_current
insert into #test (name) values('2 insert will failed');
select ident_current('#test') as ident_current

insert into #test (name) values('3 OK');
select ident_current('#test') as ident_current

select * from #test

drop table #test
Run Code Online (Sandbox Code Playgroud)

结果

id          name 
----------- ---- 
3           3 OK
Run Code Online (Sandbox Code Playgroud)

维基百科描述了ACID如下

原子性

原子性要求每个事务都是"全有或全无":如果事务的一部分失败,则整个事务失败,数据库状态保持不变.原子系统必须保证每种情况下的原子性,包括电源故障,错误和崩溃.

因此,如果插入失败,SQL Server似乎不会让数据库状态(标识值)保持不变,那么,这会破坏ACID规则吗?

顺便说一下,当插入失败时,PostgreSQL不会让身份(串行)值增长.(更新:仅有时,请参阅评论.不要依赖于此.).

test=# create table AutoIncrementTest (id serial not …
Run Code Online (Sandbox Code Playgroud)

sql sql-server postgresql acid

3
推荐指数
1
解决办法
2290
查看次数

HBase:原子'检查行不存在并创建'操作

我建议这应该是常见的情况之一,但可能在谷歌搜索时使用错误的关键字.

我只需要用完全随机的密钥创建新的表记录.假设我获得了具有良好随机性的密钥(几乎是随机的).但是,我不能100%确定没有行存在.所以我需要原子地做什么:

  • 有行键检查还没有行.
  • 如果行存在则拒绝操作.
  • 如果没有退出则创建行.

我在这个主题上找到的最有用的信息是关于HBase行锁的文章. 我认为HBase行锁是合适的解决方案,但我想在没有显式行锁定的情况下更好地做到这一点.

  • ICV看起来不合适,因为我确实希望密钥是随机的.
  • 如果他们可以在"行不存在"条件下工作,CAS会很棒,但看起来他们不能.
  • 显式行锁具有区域拆分问题等缺点.

有人可以加一些有用的建议吗?优选的API是基于Java的,但实际上它更多的是概念而不是实现.

java hadoop hbase acid nosql

3
推荐指数
1
解决办法
4457
查看次数

mysql 数据按地理位置分片

按区域进行数据分片的常用方法是什么?又名 GDPR 执法 - 欧盟数据保留在欧盟。

如果我要将用户保存emailusers表中 - 我需要以某种方式将美国和欧盟用户的数据分开。示例mysql表:

CREATE TABLE users(
        id INT NOT NULL AUTO_INCREMENT, 
        PRIMARY KEY(id),
        name VARCHAR(30), 
        email VARCHAR(30), 
        otherSensetiveData VARCHAR(30))
Run Code Online (Sandbox Code Playgroud)
  • 拥有 2 台服务器(一台在欧盟,第二台在美国)是否正常?
  • 在这种情况下自动增量如何工作并连接选择/事务?

一般来说,我只是想知道如何解决这个问题。

mysql sharding acid

3
推荐指数
1
解决办法
341
查看次数

在Oracle中使用NOLOGGING会破坏ACID吗?特别是在断电期间

在Oracle中使用NOLOGGING时,比如说插入新记录.我的数据库是否能够从断电中正常恢复?如果它在插入期间随机下降.

我是否正确说明UNDO日志将用于此类恢复...而不是REDO日志使用,如果主数据文件已被物理损坏,则可用于恢复.

oracle acid

2
推荐指数
1
解决办法
487
查看次数

为什么 NoSQL 数据库不符合 ACID?

可能的重复:
是否有任何符合 ACID 的 NoSQL?

所以,我听说 NoSQL 数据库不符合 ACID,这是为什么?

database acid nosql

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

ftruncate()是异步的吗?

我试图用C++编写一个类,它提供了一种原子地附加到文件的方法,即使是在写入中断电源的情况下也是如此.

首先,我将当前文件位置(从文件开头的64位偏移量,以字节为单位)写入单独的日志文件.然后,我将请求的数据写入日期文件的末尾.最后,我在日志文件上调用ftruncate()(将截断的大小设置为0).

主要的想法是,如果这个类被要求打开一个非空日志文件的文件,那么你就知道写入被中断了,你可以从日志文件中读取最后一次写入的位置,并将fseek读取到该位置.您丢失了最后一次部分写入,但该文件不应该被破坏.

不幸的是,似乎ftruncate()是异步的.实际上,即使我在ftruncate之后调用fflush()和fsync(),我也会看到日志在执行大量写操作时会增长到数百个字节.它最终总是在0,但我希望它始终在0或8大小.

是否有可能使ftruncate完全同步?或者有更好的方式来使用期刊?

c++ acid atomic

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

与PHP PDO的交易究竟如何与并发一起使用?

我正在制作一个webapp,他们将是多个用户互相交流,阅读/制定/修改共享数据的决策.

我已经读过交易是原子的,这就是我需要的.但是,我不确定它如何与PHP一起使用PDO::beginTransaction()

我的意思是原子,如果一个事务正在编辑某些数据,所有其他事务也修改/读取该数据将需要等到第一个事务完成.就像我不希望两个脚本读取值,递增旧脚本,并有效地只存储一个增量.第二个脚本应该等待第一个脚本完成.

在几乎所有的例子中,我都看到了连续使用的查询(例如PHP + MySQL事务示例).很多我正在做的事情需要

  • 查询和获取
  • 检查该数据并对其进行操作,作为同一事务的一部分

  1. 如果查询之间有PHP代码,事务是否仍然可以原子运行?
  2. 我知道你应该在交易之外准备你的陈述,但是可以在里面准备它吗?基本上,我担心PHP活动会破坏事务的原子性.

这是一个例子(这个不需要检查以前的值).我有一个非常基本的收件箱系统,它将邮件存储为序列化数组(如果有人有更好的推荐请告诉我).所以我查询它,附加新消息,然后存储它.它会按预期工作吗?

$getMail = $con->prepare('SELECT messages FROM inboxes WHERE id=?');
$storeMail = $con->prepare('UPDATE inboxes SET messages=? WHERE id=?');
$con->beginTransaction();
$getMail->execute(array($recipientID));
$result = $getMail->fetch();
$result = unserialize($result[0]);
$result[] = $msg;
$storeMail->execute(array(serialize($result), $recipientID));
$con->commit();
Run Code Online (Sandbox Code Playgroud)

php mysql pdo transactions acid

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

标签 统计

acid ×10

database ×3

nosql ×3

mysql ×2

sql-server ×2

atomic ×1

c++ ×1

hadoop ×1

haskell ×1

hbase ×1

java ×1

oracle ×1

pdo ×1

php ×1

postgresql ×1

sharding ×1

sql ×1

state ×1

transactions ×1

yesod ×1