标签: database

Node.js:将大量行批量插入数据库

我想批量处理大量记录(> 400k)并将其插入数据库中。

我知道如何使用for()或underscore.each()遍历数组,而且我知道如何异步地将记录插入各种(无)SQL数据库。那不是问题-问题是我找不到同时做这两种方法的方法。

数据库分发本身在这里不起作用,该原理适用于任何具有异步接口的(NO)SQL数据库。

我正在寻找一种模式来解决以下问题:

循环方法:

var results = []; //imagine 100k objects here
_.each(results,function(row){
  var newObj = prepareMyData(row);

  db.InsertQuery(newObj,function(err,response) {
    if(!err) console.log('YAY, inserted successfully');
  });

});
Run Code Online (Sandbox Code Playgroud)

这种方法显然是有缺陷的。它有点用插入查询来锤击数据库,而不必等待单个查询完成。说到使用连接池的MySQL适配器,您很快就会用尽连接,脚本将失败。

递归方法:

var results = []; //again, full of BIGDATA ;)
var index = 0;
var myRecursion = function()
{
  var row = results[index];
  var data = prepareMyData(row);
  db.InsertQuery(data,function(err, response)
  {
    if (!err)
    {

    console.log('YAY, inserted successfully!');
    index++; //increment for the next recursive call of:
    if (index < results.length) myRecursion();
    }
  }
} …
Run Code Online (Sandbox Code Playgroud)

database batch-processing node.js

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

Grails:处理现有数据库的最佳方法

我正在编写一个Grails应用程序,它将从现有的Oracle数据库中提取数据.如果我从头开始设计这个,我可以在两个或三个域模型中保存所有信息,因为从逻辑上讲,这是数据的排列方式.但是,这是一个预先存在的数据库,我需要的数据分布在大约25-30个表中.所以我想知道以下哪种方法最好.我不想做大量的额外工作来利用Grails所提供的功能,但与此同时,我希望尽可能多地利用Grails.

  1. 为所有25-30个表创建域模型,然后将数据收集到两个或三个类中.
  2. 创建两个或三个域模型,并使用SQL调用"手动"填充它们
  3. 由于我是Grails的新手,以及它如何处理数据,还有一些我还没有想过的东西.

database grails grails-orm domain-model

5
推荐指数
0
解决办法
1487
查看次数

SQL Loader日期格式

嗨,我正在尝试将数据从文件加载到Oracle中的表中,但我收到错误ORA-01843:插入日期时不是有效的月份.

文件中的日期保存为27-01-2014

我表格中的格式设置为DATE.

这是控制文件.

load data
infile 'file1.csv'
append
into table my_table
fields terminated by ',' TRAILING NULLCOLS
(Case_reference, Attempt_Number, Dialled_Number, Date_Called)
Run Code Online (Sandbox Code Playgroud)

谁知道我哪里出错了?

干杯

sql database oracle date

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

由于返回输出参数(OracleParameter),第二次插入失败

我试图在表中插入两行(sequentiel).执行第一个插入命令没有任何问题.第二个插入命令卡在ExecuteNonQuery()部件中.当我删除返回部分(OracleParameterwith Direction = Output)时,两个插入都成功.

不起作用(按顺序执行两次,每次都有不同的数据):

cmd.CommandText = "INSERT INTO table (Col1, Col2, Col3,...) VALUES (:ParamCol1, :ParamCol2, :ParamCol3,...) RETURNING ROWIDTOCHAR(ROWID) INTO :OutputROWID";

作品:

cmd.CommandText = "INSERT INTO table (Col1, Col2, Col3,...) VALUES (:ParamCol1, :ParamCol2, :ParamCol3,...)";

output-parameter声明并初始化如下:

OracleParameter outputRowId = new OracleParameter(":OutputROWID", OracleDbType.Varchar2, 30) { Direction = ParameterDirection.Output })

参考:OracleParameter

有趣的是,当我使用第一个方法(返回ROWID)时它也有效,但只有当我将第二个插入中的参数重命名为ie时才有效:OutputROWID2.

关于为什么执行陷入困境以及如何解决这个问题的任何想法?

编辑:

这里有更长的Code-Snippet:

using (OracleTransaction transaction = Globals.Db.Connection.BeginTransaction())
            {

                using (OracleCommand cmd = Globals.Db.Connection.CreateCommand())
                {
                    cmd.BindByName = true;
                    cmd.CommandText = "INSERT …
Run Code Online (Sandbox Code Playgroud)

.net c# database oracle odp.net

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

将PDF从内存加载到telerik:RadPdfViewer

我有一个PDF文件存储在数据库中作为字节数组.我正在从我的数据库中读取PDF字节数组回到我的应用程序中.

现在,我正在尝试使用RadPdfViewer显示PDF但它无法正常工作.

这是我的代码:

    byte[] pdfAsByteArray= File.ReadAllBytes(@"C:\Users\Username\Desktop\Testfile.pdf");

    //Save "pdfAsByteArray" into database
    //...
    //Load pdf from database into byte[] variable "pdfAsByteArray"

    using (var memoryStream = new MemoryStream(pdfAsByteArray))
    {
        this.PdfViewer.DocumentSource = new PdfDocumentSource(memoryStream);
    }
Run Code Online (Sandbox Code Playgroud)

当我执行应用程序时,我得到一个空的PdfViewer.

问题:如何以正确的方式设置DocumentSource?

问题:如何处理流?(注意using不起作用)

注意:我不想避免将临时文件写入磁盘


编辑:

我想通了,但我对这个解决方案并不完全满意:

不工作:

using (var memoryStream = new MemoryStream(pdfAsByteArray))
{
    this.PdfViewer.DocumentSource = new PdfDocumentSource(memoryStream);
}
Run Code Online (Sandbox Code Playgroud)

工作:

var memoryStream = new MemoryStream(pdfAsByteArray);
this.PdfViewer.DocumentSource = new PdfDocumentSource(memoryStream);
Run Code Online (Sandbox Code Playgroud)

我不知道teleriks RadPdfViewer组件是如何工作的,但我不想处理Stream.

c# database pdf wpf telerik

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

配置弹性设置Entity Framework 6.02

我正在尝试为EF6.02配置弹性设置.我有一个应用程序,它在一个执行点将日志条目写入数据库.应用程序不依赖于SQL服务器,因此如果服务器没有响应,我希望应用程序放弃INSERT查询(通过DbContext的SaveChanges)并立即继续执行.

使用默认设置,调试日志输出十

"在System.Data.dll中发生'System.Data.SqlClient.SqlException'类型的第一次机会异常"

十次尝试后,它会抛出一个异常,我的代码继续.但我想要一次尝试,例如2秒命令超时.根据MSDN上的文档,SQL Server的默认弹性方法是:

DefaultSqlExecutionStrategy:这是默认使用的内部执行策略.此策略根本不会重试,但它会包含任何可能是暂时的异常,以通知用户他们可能希望启用连接弹性.

正如文档中提到的,这种策略根本不会重试.但我还有十次重试.我试图创建一个继承DbConfiguration的类,但我没有找到任何关于如何更改它的文档.

任何人都可以帮我减少重试次数吗?

更新:以下是基于建议的代码

using System;
using System.Data.Entity;
using System.Data.Entity.SqlServer;
using System.Data.Entity.Infrastructure;
using System.Runtime.Remoting.Messaging;

namespace MyDbLayer
{
    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration ()
        {

          this.SetExecutionStrategy("System.Data.SqlClient", () => SuspendExecutionStrategy
          ? (IDbExecutionStrategy)new DefaultExecutionStrategy()
          : new SqlAzureExecutionStrategy());
        }

        public static bool SuspendExecutionStrategy
        {
            get
            {
                return (bool?)CallContext.LogicalGetData("SuspendExecutionStrategy") ?? false;
            }
            set
            {
                CallContext.LogicalSetData("SuspendExecutionStrategy", value);
            }
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

并且代码写入SQL

try
    {
        using (MyEntities context = new MyEntities ())
        {
            Log logEntry = new …
Run Code Online (Sandbox Code Playgroud)

.net c# sql database entity-framework

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

一个表中的许多空值与三个表中的空值

我有三个表与普通场- users,guestsadmins.

最后两个表有一些users字段.这是一个例子:

用户

id|username|password|email|city|country|phone|birthday|status
Run Code Online (Sandbox Code Playgroud)

宾客

id|city|country|phone|birthday
Run Code Online (Sandbox Code Playgroud)

管理员

id|username|password|status
Run Code Online (Sandbox Code Playgroud)

我想知道它是否更好:

a)使用一个具有许多NULL值的表

b)使用三个表

mysql sql database null database-design

5
推荐指数
2
解决办法
1215
查看次数

函数还原sql语句

如何删除/移动/标记电子邮件时,如何像Gmail一样实现对MySQL数据库的撤消更改功能.

到目前为止,我有一个系统日志表,其中包含用户执行的确切sql语句.

例如,我正在尝试转换:

INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2')
Run Code Online (Sandbox Code Playgroud)

成:

DELETE FROM table WHERE id=1, column1='value1', column2='value2'
Run Code Online (Sandbox Code Playgroud)

是否有内置函数来执行此操作,如cisco路由器命令,如

(NO|UNDO|REVERT) INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2')
Run Code Online (Sandbox Code Playgroud)

也许我的方法是不正确的,我应该保存我的行的当前状态和更改的行,以回到它的原始状态?

就像是:

original_query = INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2')

executed_query = INSERT INTO table (id, column1, column2) VALUES (1,'change1', 'change2')
Run Code Online (Sandbox Code Playgroud)

后来变成:

INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2') ON DUPLICATE KEY UPDATE
 column1=VALUES(column1), column2=VALUES(column2)
Run Code Online (Sandbox Code Playgroud)

但也许它不适用于新插入的行,或者如果我修改主键可能会导致麻烦,所以我宁愿让它们保持不变.

这是我的日志表:

CREATE TABLE `log` (
 `id` …
Run Code Online (Sandbox Code Playgroud)

php mysql sql database undo

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

DB2 SQLCODE = -805,SQLSTATE = 51002,SQLERRMC = NULLID.SYSLH203 0X5359534C564C3031

我收到以下错误:

 com.ibm.db2.jcc.am.SqlException: DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002, SQLERRMC=NULLID.SYSLH203 0X5359534C564C3031, DRIVER=3.58.81 
Run Code Online (Sandbox Code Playgroud)

在一段时间后执行申请.在网上没有得到任何富有成效的答案.

database db2 sqlcode

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

具有数据库使用的设计模式

我看到99%的设计模式示例(策略,工厂,装饰器等)具有硬编码信息,每个产品在不同的类中等等.但是,在大多数现实应用中,主要是数据库使用,我们知道为每个产品创建一个类,或使用硬编码信息是不切实际的.

我知道它们都是例子,但我认为从一本书中学到以后这很痛苦:

为店铺NYStore,ChicagoStore创建CheesePizza,VeggiePizza ...和类的课程

对于工厂模式..而在现实生活中,所有这些比萨饼和商店只是数据库中的行.

那么,在这种情况下,使用数据库和设计模式的最佳方法是什么?

  1. 如果比萨饼和商店在数据库中,则不需要使用设计模式.
  2. 使用设计模式,但是每个Pizza或Store创建一个类,只需创建一个从数据库读取数据的类实现(例如DatabasePizza和DatabaseStore!).

我理解设计模式与支付业务的重要性,例如.(现金,信用卡,比特币..)每种支付类型都有独特的专业化,而且业务不完全在数据库中(信用卡需要打印收据,比特币需要访问网络服务等).

但我正在质疑的是:在真正的比萨餐厅,价格,配料,配料,所有根据不同的地方(芝加哥,纽约..)都位于数据库中,设计模式的使用是否真的有必要?当许多企业位于数据库时,设计模式的使用自然会减少?

database oop design-patterns

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