问题标签 [flat-file]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 用 C# 解析 EDI 平面文件?
最初我想使用 SSIS 来解析 EDI 文件,但是我看到了一些手动 EDI 解析器(字段映射),并希望在 C# 中使用自动化此功能。
示例 EDI 文件:
sql-server-2005 - SQL Server 2005:提高数千或插入请求的性能。注销登录时间= 120ms
有人可以阐明 SQL Server 2005 如何处理使用 ADO.NET 2.0 的客户端发出的可能请求。下面是 SQL Trace 的简短输出。我可以看到连接池正在工作(我相信只有一个连接正在池中)。我不清楚为什么我们有这么多 sp_reset_connection 调用,即一系列:审计登录、SQL:BatchStarting、RPC:Starting 和下面 for 循环中每个循环的审计注销。我可以看到 tempdb 和 master 数据库之间不断切换,这使我得出结论,当通过基于 ConectionString 参数从池中获取创建下一个连接时,我们丢失了上下文。
我可以看到每 15 毫秒我每秒可以获得 100-200 次登录/注销(由 Profiler 同时报告)。在 15 毫秒之后,我再次获得了每秒 100-200 次登录/注销的系列。
我需要澄清这可能如何影响生产环境中复杂的插入查询。我使用 Enterprise Library 2006,代码是用 VS 2005 编译的,它是一个控制台应用程序,它解析一个包含数千行分组父子行的平面文件,在应用程序服务器上运行并在远程 SQL 上运行 2 个存储过程Server 2005 插入父记录,检索标识值并使用它调用第二个存储过程 1、2 或多次(有时数千)插入子记录。子表有近 1000 万条记录,其中有 5-10 个索引,其中一些索引覆盖非集群。有一个非常复杂的插入触发器,它将插入的详细记录复制到存档表。总而言之,我每秒只有 7 次插入,这意味着 5 万条记录可能需要 2-4 小时。
所以我的问题是,是否有某种方法可以改进记录的插入,因为公司加载了 10 万条记录并进行日常计划,并且有 SLA 来满足作为平面文件订单的客户请求,并且必须处理一些大于 1 万的大文件(快速导入)。4小时导入6万应该减少到30分钟。
我正在考虑使用 DataAdapter 的 BatchSize 来发送多个存储过程调用,SQL Bulk 插入来批量从 DataReader 或 DataTable 进行多个插入,SSIS 快速加载。但我不知道如何正确分析重新索引和统计人口,也许这需要一些时间才能完成。更糟糕的是,该公司使用最大的表进行报告和其他在线处理,并且无法删除索引。我通过将字段设置为一个值来手动管理事务,并进行事务更新,将该值更改为其他应用程序用来获取已提交行的新值。
请告知如何解决这个问题。现在,我正在尝试在单独的数据库中使用最少的日志记录和没有索引的登台表,我将尝试进行批量(大量)父子插入。我相信生产数据库具有简单的恢复模型,但它可能是完全恢复。如果我的 .NET 控制台应用程序正在使用的 DB 用户具有 bulkadmin 角色,这是否意味着它的批量插入被最低限度地记录。我知道当一个表已经聚集并且许多非聚集索引插入时,仍然会为每一行记录。
连接池正在工作,但有很多登录/注销。为什么?
for (int i = 1; i <= 10000; i++){ using (SqlConnection conn = new SqlConnection("server=(local);database=master;integrated security=sspi;")) {conn.Open(); 使用 (SqlCommand cmd = conn.CreateCommand()){ cmd.CommandText = "使用 tempdb"; cmd.ExecuteNonQuery();}}}
SQL Server Profiler 跟踪:
审核登录主控 2010-01-13 23:18:45.337 1 - 非池化
SQL:BatchStarting 使用 tempdb 主控 2010-01-13 23:18:45.337
RPC:启动 exec sp_reset_conn tempdb 2010-01-13 23:18:45.337
审核注销tempdb 2010-01-13 23:18:45.337 2 - 池
审核登录 - 网络协议主控 2010-01-13 23:18:45.383 2 - 池
化 SQL:BatchStarting 使用 tempdb 主控 2010-01-13 23:18:45.383
RPC:启动 exec sp_reset_conn tempdb 2010-01-13 23:18:45.383
审核注销 tempdb 2010-01-13 23:18:45.383 2 - 池化
审核登录 -- 网络协议主控 2010-01-13 23:18:45.383 2 - 池
化 SQL:BatchStarting 使用 tempdb 主控 2010-01-13 23:18:45.383
RPC:启动 exec sp_reset_conn tempdb 2010-01-13 23:18 :45.383
审核注销 tempdb 2010-01-13 23:18:45.383 2 - 合并
c# - 使用生产者/消费者模式和 SqlBulkCopy 使用多线程将平面文件分块处理到 SQL Server DB
我希望你能忍受我。我想提供尽可能多的信息。主要问题是如何创建将由多个线程使用的结构(如堆栈),该结构将弹出一个值并使用它来处理一个大平面文件,并可能一次又一次地循环直到处理整个文件。如果一个文件有 100.000 条记录,可由 5 个线程使用 2.000 个行块处理,那么每个线程将获得 10 个块来处理。
我的目标是在平面文件中移动数据(带有 Header...Subheader...Detail, Detail, Detail, ...Detail, SubFooter, Subheader...Detail, Detail, Detail, ...Detail, SubFooter, Subheader...Detail, Detail, Detail, ...Detail, SubFooter, Footer structure) 到具有简单恢复模式的 OLTP DB 中(可能是完整的)到 3 个表中:第一个表示 Subheader 行中存在的 Subheader 唯一键,第二个中间表 SubheaderGroup,表示 2000 条记录块中的详细信息行的分组(需要将 Subheader 的 Identity PK 作为其 FK,第三个表示 FK 指向 Subheader PK 的详细信息行。
我正在执行手动事务管理,因为我可以拥有数万个详细信息行,并且我在加载期间使用在目标表中设置为 0 的特殊字段,然后在文件处理结束时我正在执行事务更新更改此值为 1 可以指示其他应用程序加载完成。
我想将此平面文件切成多个相等的部分(相同的行数),可以使用多个线程处理并使用 SqlBulkCopy 使用 IDataReader 导入,该 IDataReader 是从目标表元数据创建的)。
我想使用生产者/消费者模式(如下面的链接中所述 - pdf 分析和代码示例)将 SqlBulkCopy 与 SqlBulkCopyOptions.TableLock 选项一起使用。 http://sqlblog.com/blogs/alberto_ferrari/archive/2009/11/30/sqlbulkcopy-performance-analysis.aspx 这种模式可以创建多个生产者,并且等量的消费者需要订阅生产者才能消费该行。
在TestSqlBulkCopy 项目中,DataProducer.cs 文件中有一个方法可以模拟生产数千条记录。
此方法将在新线程的上下文中执行。我希望这个新线程只读取原始平面文件的唯一块,另一个线程将开始处理下一个块。然后,消费者将使用 SqlBulkCopy ADO.NET 类将数据(泵送给他们)移动到 SQL Server DB。
所以这里的问题是关于主程序规定每个线程应该处理什么 lineFrom 到 lineTo ,我认为这应该在线程创建期间发生。第二种解决方案可能是让线程共享一些结构并使用它们独有的东西(如线程号或序列号)来查找共享结构(可能是堆栈并弹出一个值(在执行此操作时锁定堆栈),然后下一个线程将然后选取下一个值。主程序将选取平面文件并确定块的大小并创建堆栈。
那么有人可以提供一些代码片段,关于多个线程如何处理一个文件并且只获得该文件的唯一部分的伪代码吗?
谢谢,拉德
database - 与普通文件相比,使用数据库的优点和缺点是什么?
我找不到在普通文件上使用数据库的优点和缺点。你能帮帮我吗?
sql - 从文件或数据库服务器访问数据是否更快?
如果我有一个由文件夹和文件组成的静态数据库,考虑到这将在 CGI 脚本中使用,访问和操作会比 SQL 服务器类型的数据库更快吗?
处理文件和文件夹时,提高性能的技巧是什么?
php - 使用平面文件或 MySQL 的 PHP 中有任何分离/独立的会话库吗?
使用平面文件或 MySQL 的 PHP 中有任何分离/独立的会话库吗?
python - 使用 Python 进行只读二进制平面文件存储的选项
我的任务是建立一个平面文件 SKU 数据库,用于存储和处理器速度有限的嵌入式设备。
基本上我需要存储的数据包括以下内容:
SKU 描述 地点 价格 数量
该文件将包含数百万条记录。
最重要的考虑因素是存储空间和检索时间。记录只需要按 SKU 检索,并且是只读的,因此可以按 SKU 对文件进行排序。
我想用 Python 访问这些数据。所以我的问题归结为这个。
是否有现有的 Python 库可以为我提供此功能,还是我需要自己开发?
如果答案归结为我自己,有没有人有建议或很好的参考?
python - 处理非平面文件中的文本(提取信息,就好像它*是*平面文件一样)
我有一个由计算机模拟生成的纵向数据集,可以用下表表示(“var”是变量):
和
但是,生成的文件会以类似于以下格式的格式写入数据文件:
我一直在使用(python)脚本将此输出数据处理为平面文本文件,以便我可以将其导入 R、python、SQL 或 awk/grep 以提取信息 - 所需信息类型的示例单个查询(在 SQL 表示法中,数据转换为表后)如下所示:
我想知道是否有更有效的解决方案,因为这些数据文件中的每一个都可能约为 100MB(我有数百个),并且创建平面文本文件非常耗时,并且会占用额外的硬盘空间和冗余信息。理想情况下,我会直接与原始数据集交互以提取我想要的信息,而无需创建额外的平面文本文件......对于此类任务是否有更简单的 awk/perl 解决方案?我非常精通 python 中的文本处理,但我的 awk 技能还很初级,而且我没有 perl 的工作知识;我想知道这些或其他特定领域的工具是否可以提供更好的解决方案。
谢谢!
后记: 哇,谢谢大家!很抱歉我不能选择每个人的答案@FM:谢谢。我的 Python 脚本类似于您的代码,但没有过滤步骤。但是你的组织是干净的。@PP:我以为我已经精通 grep 但显然不是!这非常有帮助......但我认为将“时间”混合到输出中时 grepping 变得很困难(我未能在我的示例中将其作为可能的提取场景包括在内!那是我的错)。@ghostdog74:这真是太棒了...但是修改该行以获取“subjectA”并不简单...(尽管同时我会阅读更多关于 awk 的内容,希望以后能深入了解)。@weismat:说得好。@S.Lott:这非常优雅和灵活——我不是在要求 python(ic) 解决方案,但这完全适合解析、过滤、
再次,我感谢大家 - 非常感谢。
sql - 简单、快速的平面文件 SQL 查询
有谁知道使用类似 SQL 的声明性查询语言提供简单、快速的平面文件查询的工具?我宁愿不支付将文件加载到数据库中的开销,因为输入数据通常在查询运行后几乎立即被丢弃。
考虑数据文件“animals.txt”:
假设我想为每个独特的动物提取最高值。我想写一些类似的东西:
我可以使用以下方法获得几乎相同的结果sort
:
而且我总是可以awk
从那里进入,但是当一种类似 SQL 的语言似乎可以如此干净地解决问题时,这一切都让人感觉有点awk
不舒服(无法抗拒)。
我考虑过为 SQLite 编写一个包装器,它会根据输入数据自动创建一个表,并且我研究过在单处理器模式下使用 Hive,但我不禁觉得这个问题之前已经解决了。我错过了什么吗?此功能是否已由另一个标准工具实现?
哈!
php - 建议:用 PHP 构建一个非数据库驱动的简单 CMS
我正在一个需要非常简单的 CMS 的网站上工作 - 基本上主页上有一段文本需要客户端编辑。他们当前的托管计划不允许使用数据库,并且包括一个将每月额外花费 X 美元,我认为这对于这样一个基本系统来说是不必要的。
该网站目前是使用 Codeignitor 构建的。我打算使用平面 PHP 或 TXT 文件编写其中的 CMS 部分,是否有值得考虑的替代方法,优缺点是什么?