我想批量处理大量记录(> 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) 我正在编写一个Grails应用程序,它将从现有的Oracle数据库中提取数据.如果我从头开始设计这个,我可以在两个或三个域模型中保存所有信息,因为从逻辑上讲,这是数据的排列方式.但是,这是一个预先存在的数据库,我需要的数据分布在大约25-30个表中.所以我想知道以下哪种方法最好.我不想做大量的额外工作来利用Grails所提供的功能,但与此同时,我希望尽可能多地利用Grails.
嗨,我正在尝试将数据从文件加载到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)
谁知道我哪里出错了?
干杯
我试图在表中插入两行(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 })
有趣的是,当我使用第一个方法(返回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) 我有一个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.
我正在尝试为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) 我有三个表与普通场- users,guests和admins.
最后两个表有一些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)使用三个表
如何删除/移动/标记电子邮件时,如何像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) 我收到以下错误:
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)
在一段时间后执行申请.在网上没有得到任何富有成效的答案.
我看到99%的设计模式示例(策略,工厂,装饰器等)具有硬编码信息,每个产品在不同的类中等等.但是,在大多数现实应用中,主要是数据库使用,我们知道为每个产品创建一个类,或使用硬编码信息是不切实际的.
我知道它们都是例子,但我认为从一本书中学到以后这很痛苦:
为店铺NYStore,ChicagoStore创建CheesePizza,VeggiePizza ...和类的课程
对于工厂模式..而在现实生活中,所有这些比萨饼和商店只是数据库中的行.
那么,在这种情况下,使用数据库和设计模式的最佳方法是什么?
我理解设计模式与支付业务的重要性,例如.(现金,信用卡,比特币..)每种支付类型都有独特的专业化,而且业务不完全在数据库中(信用卡需要打印收据,比特币需要访问网络服务等).
但我正在质疑的是:在真正的比萨餐厅,价格,配料,配料,所有根据不同的地方(芝加哥,纽约..)都位于数据库中,设计模式的使用是否真的有必要?当许多企业位于数据库时,设计模式的使用自然会减少?